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

cam*_*mil 7 python mysql odbc pyodbc

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

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

我正在考虑编写一个包装器来执行查询.首先,它将检查连接是否关闭,如果是,它将重新连接.这是一种可行的方法吗?

Aar*_*lla 6

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


lri*_*nik 5

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

try:
    cursor = conn.cursor()
except e:
    if e.__class__ == pyodbc.ProgrammingError:        
        conn == reinit()
        cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个好主意。pyodbc.ProgrammingError 在很多情况下都会引发。使用这个你会吃掉很多重要的错误消息。 (2认同)