12

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

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

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

4

3 回答 3

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
于 2012-06-01T10:08:50.867 回答
4

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

try:
    cursor = conn.cursor()
except e:
    if e.__class__ == pyodbc.ProgrammingError:        
        conn == reinit()
        cursor = conn.cursor()
于 2015-04-07T10:34:39.740 回答
1

你也可以这样做duck typing。使用您需要的东西并捕获异常。99% 的情况下它可能是好的。

于 2012-06-01T09:39:42.113 回答