检查 pyodbc 连接是打开还是关闭

新手上路,请多包涵

我经常收到这个错误: ProgrammingError: The cursor's connection has been closed.

有没有办法在我尝试执行查询之前检查我正在使用的连接是否已关闭?

我正在考虑编写一个包装器来执行查询。首先它会检查连接是否关闭,如果是,它会重新连接。这是这样做的明智方法吗?

原文由 cammil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 702
2 个回答

包装器是个好主意,但我不知道有任何 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

原文由 Aaron Digulla 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一种选择是检查您是否可以获得游标(很多时候这就是您想要的连接),否则重新初始化连接。它看起来像这样:

 try:
    cursor = conn.cursor()
except e:
    if e.__class__ == pyodbc.ProgrammingError:
        conn == reinit()
        cursor = conn.cursor()

原文由 lribinik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题