【发布时间】:2020-05-13 00:06:34
【问题描述】:
我正在使用 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,但行为没有改变。
我应该怎么做才能确保连接?
谢谢
【问题讨论】:
标签: python sqlalchemy pymysql