使用PyMySql

时间:2018-12-17 17:05:30

标签: mysql python-3.x pymysql

使用PyMySql时,我的行为很奇怪。

我的Connection类如下。

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行,初始化

self.connect()   File "/home/priyesh/virtualenvs/virtualenv_python3_ibsync/lib/python3.6/site-packages/pymysql/connections.py",
     

第598行,处于连接状态

self._request_authentication()   

文件“ /home/priyesh/virtualenvs/virtualenv_python3_ibsync/lib/python3.6/site-packages/pymysql/connections.py”,

  

第849行,_request_authentication中       数据+ = struct.pack('B',len(connect_attrs))+ connect_attrs struct.error:ubyte格式需要0 <=数字<= 255

知道为什么会发生这种情况吗? 代码非常简单,可以在Test Class中运行,而不能在Main执行脚本中运行。

0 个答案:

没有答案