【发布时间】:2019-04-16 15:40:04
【问题描述】:
每次我重新启动 mysql 服务时,我的应用都会在任何查询中收到以下错误:
result = self._query(query)
File "/usr/local/lib/python3.6/site-packages/pymysql/cursors.py", line 328, in _query
conn.query(q)
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 516, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 727, in _read_query_result
result.read()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 1066, in read
first_packet = self.connection._read_packet()
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 656, in _read_packet
packet_header = self._read_bytes(4)
File "/usr/local/lib/python3.6/site-packages/pymysql/connections.py", line 702, in _read_bytes
CR.CR_SERVER_LOST, "Lost connection to MySQL server during query")
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query') [SQL: ...] [parameters: {...}] (Background on this error at: http://sqlalche.me/e/e3q8)
之后的任何查询都会照常成功。
这只是一个常见的用例,通常我可能想根据错误重试任何查询。
有什么方法可以在一些低级别的sqlalchemy api 中捕获并重试查询?在我的代码中使用 try-except 或自定义 query 方法是不合理的,因为我使用它的次数太多且不可维护。
【问题讨论】:
-
自定义查询或围绕它的包装有什么问题?在这种情况下,将其用作每个查询的
try... except...块的基础似乎是最明智的解决方案。你有minimal reproducible example格式的sn-p代码来演示这个问题吗?
标签: python mysql sqlalchemy flask-sqlalchemy retry-logic