使用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执行脚本中运行。