我想为我的python脚本创建一个简单的mysql连接类。该类的预期用途script.py
:
import db_connection
db = db_connection.DBConnection()
db.get_cursor()
该类本身在脚本中db_connect.py
:
import mysql.connector
class DBConnection:
def __init__(self):
self.__host="192.168.1.22"
self.__port="3306"
self.__user="somename"
self.__passwd="somepw"
self.__database="mydbname"
def __connect(self):
con = mysql.connector.connect(
self.__host,
self.__port,
self.__user,
self.__passwd,
self.__database
)
print("connected.")
return con
def get_cursor(self):
con = self.__connect()
cursor = con.cursor(dictionary=True)
return cursor
我收到以下错误:
Traceback (most recent call last):
File "C:/.../script.py", line 14, in <module>
db.get_cursor()
File "C:\...\db_connection.py", line 26, in get_cursor
con = self.__connect()
File "C:\...\db_connection.py", line 13, in __connect
con = mysql.connector.connect(
File "C:\...\Python\Python38-32\lib\site-packages\mysql\connector\__init__.py", line 219, in connect
return MySQLConnection(*args, **kwargs)
File "C:\...\Python\Python38-32\lib\site-packages\mysql\connector\connection.py", line 64, in __init__
super(MySQLConnection, self).__init__(*args, **kwargs)
TypeError: __init__() takes 1 positional argument but 6 were given
Process finished with exit code 1
我的类中的init函数和mysql包的init函数似乎存在问题。我对Python不太熟练,无法理解我在做什么,因此非常感谢您的帮助。
毫无疑问,您的班级__init__
方法隐藏了MySQLConnection
。问题是您将参数作为位置参数传递,而mysql.connector.connect
要求将它们作为关键字参数传递,例如:
con = mysql.connector.connect(
host=self.__host,
port=self.__port,
user=self.__user,
password=self.__passwd,
database=self.__database
)
您还可以参考文档中的一些示例。
正如Matthias指出的,这里不需要两个下划线(普通用户编写的代码中很少需要)。要将这些变量标记为类的内部变量,通常使用单个下划线,即:
def __init__(self):
self._host="192.168.1.22"
self._port="3306"
self._user="somename"
self._passwd="somepw"
self._database="mydbname"
您会遇到进一步的错误
ReferenceError:弱引用对象不再存在
因为您的连接只是临时的,并且存在于您get_cursor
方法的范围之内。该方法结束时将关闭连接。您可以通过将连接存储在类中来解决此问题,该类保留对打开的连接的引用,例如:
class DBConnection:
def __init__(self):
self._host="192.168.1.22"
self._port="3306"
self._user="somename"
self._passwd="somepw"
self._database="mydbname"
self.con = None
def _connect(self):
self.con = mysql.connector.connect(
host=self._host,
port=self._port,
user=self._user,
password=self._passwd,
database=self._database
)
print("connected.")
def get_cursor(self):
if not self.con:
self._connect()
return self.con.cursor(dictionary=True)
有关更多详细信息,请ReferenceError
参见“弱引用对象不再存在”是什么意思?。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句