Нет вопроса о методе __init__
вашего класса, скрывающем метод MySQLConnection
. Проблема заключается в том, что вы передаете свои аргументы в качестве позиционных аргументов, тогда как mysql.connector.connect
требует, чтобы они передавались как ключевые аргументы, например:
con = mysql.connector.connect(
host=self.__host,
port=self.__port,
user=self.__user,
password=self.__passwd,
database=self.__database
)
Вы также можете обратиться к документации для некоторых examples .
Как указал Маттиас, здесь не требуется двух ведущих подчеркиваний (редко требуется в коде, который пишут обычные пользователи). Чтобы пометить эти переменные как внутренние для вашего класса, вы обычно используете одно подчеркивание, например:
def __init__(self):
self._host="192.168.1.22"
self._port="3306"
self._user="somename"
self._passwd="somepw"
self._database="mydbname"
Вы получаете дополнительную ошибку
ReferenceError: объект со слабой ссылкой no существует дольше
, поскольку ваше соединение является только временным и существует в рамках вашего метода 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
можно найти в Что это значит "объект со слабой ссылкой больше не существует"? .