Struct Ubyte Error при подключении к базе данных MySQL с использованием PyMySql - PullRequest
0 голосов
/ 17 декабря 2018

Я получаю очень странное поведение при использовании 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>

Есть идеи, почему это может происходить? Код довольно прост иработает из тестового класса, но не из основного сценария выполнения.

...