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

时间:2012-06-01 09:25:56

标签: python mysql odbc pyodbc

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

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

另一种选择是检查你是否可以获得一个游标(无论如何都是你想要的连接)并重新初始化连接。它看起来像这样:

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

答案 2 :(得分:1)

您也可以duck typing。使用您需要的并捕获异常。 99%的时间可能没问题。