Я получаю очень странное поведение при использовании PyMySql.
Мой класс подключения выглядит следующим образом.
class MySqlConnection:
def __init__(self):
self.host = conf.DB_HOST
self.port = conf.DB_PORT
self.user = conf.DB_USER
self.passwd = conf.DB_PASSWD
self.db = conf.DB_DEFAULT
self.connection = None
self.cursor = None
#self.__connect()
def connect(self):
self.connection = pymysql.connect(host=self.host,
user=self.user,
password=self.passwd,
db=self.db)
self.cursor = self.connection.cursor()
И поверх него есть оболочка, которая выполняет запрос.
class QueryExecutor:
def __init__(self, table_name_for_query, table_attributes):
self.conn = MySqlConnection()
self.table_for_query = table_name_for_query
self.table_attributes = table_attributes
def create_connection(self):
self.conn.connect()
def close_connection(self):
self.conn.close()
А потом класс таблицы.
class SupportedTables:
def __init__(self, table_name, attributes):
self.query_executor = QueryExecutor(table_name, attributes)
def save(self):
'''
Inserts query for saving data in DB.
'''
self.query_executor.create_connection()
value_list = []
for attrib in self.attributes:
if 'AUTO_INCREMENT' in attrib[1]:
continue
col_name = attrib[0]
value_list.append(getattr(self, col_name))
insert_data = [value_list]
if len(value_list) != 0:
self.query_executor.insert_data(data_to_insert=insert_data)
self.query_executor.close_connection()
Теперь, когда я выполняю тесты для SupportedTables и его производных классов, код работает нормально.У меня не возникает никаких проблем.
Однако, когда я пытаюсь выполнить код из тестового класса, я получаю сообщение об ошибке вроде:
self.query_executor.create_connection () "/home / priyesh / db / QueryExecutor_v2.py ", строка 17,
в create_connection
self.conn.connect() File "/home/priyesh/db/connection_handler.py", line 24, in connect
db=self.db) File "/home/priyesh/virtualenvs/virtualenv_python3_ibsync/lib/python3.6/site-packages/pymysql/__init__.py",
строка 94, в Connect
return Connection(*args, **kwargs) File "/home/priyesh/virtualenvs/virtualenv_python3_ibsync/lib/python3.6/site-packages/pymysql/connections.py",
строка 327, в init
self.connect() File "/home/priyesh/virtualenvs/virtualenv_python3_ibsync/lib/python3.6/site-packages/pymysql/connections.py",
строка 598, в connect
self._request_authentication()
File "/ home / priyesh / virtualenvs / virtualenv_python3_ibsync / lib/python3.6/site-packages/pymysql/connections.py",
строка 849, в _request_authentication data + = struct.pack ('B', len (connect_attrs)) + connect_attrs struct.error: для формата ubyte требуется 0 <= число <= 255 </strong>
Есть идеи, почему это может происходить? Код довольно прост иработает из тестового класса, но не из основного сценария выполнения.