包装器是个好主意,但我不知道任何 API 可以可靠地检查连接是否关闭。
所以解决方案应该是这样的:
for retry in range(3):
try:
... execute query ...
return # Stop on success
except e:
if is_connection_broken_error(e):
reconnect()
continue
raise
raise # throw if the retry fails too often
Run Code Online (Sandbox Code Playgroud)
另一种选择是检查是否可以获得光标(很多时候这就是您想要从连接中获得的),否则重新初始化连接。它看起来像这样:
try:
cursor = conn.cursor()
except e:
if e.__class__ == pyodbc.ProgrammingError:
conn == reinit()
cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)