我正在使用sqlalchemy连接mysql数据库。我的代码看起来像这样
engine = sqlalchemy.create_engine(sqlalchemy.engine.url.URL(**url), connect_args={'cursorclass': SSCursor})
conn = engine.connect()
由于需要一次从DB获取大量数据,因此我使用了SSCursor。我做了一些调查,我创建了一个场景,连接在60秒后丢失。它是由简单的代码模拟的,我添加了timeout(60)。我得到了如下的回溯:
Exception during reset or similar
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 687, in _finalize_fairy
fairy._reset(pool)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/pool.py", line 829, in _reset
pool._dialect.do_rollback(self)
File "/usr/local/lib/python3.5/dist-packages/sqlalchemy/dialects/mysql/base.py", line 1598, in do_rollback
dbapi_connection.rollback()
File "/usr/local/lib/python3.5/dist-packages/pymysql/connections.py", line 788, in rollback
self._execute_command(COMMAND.COM_QUERY, "ROLLBACK")
File "/usr/local/lib/python3.5/dist-packages/pymysql/connections.py", line 1067, in _execute_command
raise err.InterfaceError("(0, '')")
pymysql.err.InterfaceError: (0, '')
Exception ignored in: <bound method MySQLResult.__del__ of <pymysql.connections.MySQLResult object at 0x7fed3af0d828>>
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/pymysql/connections.py", line 1332, in __del__
File "/usr/local/lib/python3.5/dist-packages/pymysql/connections.py", line 1434, in _finish_unbuffered_query
File "/usr/local/lib/python3.5/dist-packages/pymysql/connections.py", line 983, in _read_packet
File "/usr/local/lib/python3.5/dist-packages/pymysql/connections.py", line 1014, in _read_bytes
AttributeError: 'NoneType' object has no attribute 'settimeout'
我不能弄清楚,如何确保连接在不同的所需时间后超时。我尝试在connect_args
中使用connect_timeout
,但行为没有任何变化。
我应该做些什么来确保连接?
谢谢
发布于 2018-05-31 17:51:19
您应该更改MySQL服务器选项,增加net_read_timeout
和max_allowed_packet
的值
https://dev.mysql.com/doc/refman/5.5/en/error-lost-connection.html
https://stackoverflow.com/questions/47248047
复制相似问题