我经常会收到这样的错误:ProgrammingError: The cursor's connection has been closed.
检查pyodbc连接是打开还是关闭
有没有一种方法来检查是否之前,我试图执行一个查询我使用的连接已经关闭?
我正在考虑编写一个包装来执行查询。首先它会检查连接是否关闭,如果是,它会重新连接。这是一个明智的做法吗?
我经常会收到这样的错误:ProgrammingError: The cursor's connection has been closed.
检查pyodbc连接是打开还是关闭
有没有一种方法来检查是否之前,我试图执行一个查询我使用的连接已经关闭?
我正在考虑编写一个包装来执行查询。首先它会检查连接是否关闭,如果是,它会重新连接。这是一个明智的做法吗?
包装是一个好主意,但我不知道任何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
你也可以做duck typing
。使用你需要的,并捕捉异常。 99%的时间很可能是确定的。
另一种选择是检查如果你能得到一个光标(很多次,就是你从无论如何连接想要什么)和重新初始化否则连接。它看起来像这样:
try:
cursor = conn.cursor()
except e:
if e.__class__ == pyodbc.ProgrammingError:
conn == reinit()
cursor = conn.cursor()