Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查pyodbc连接是否打开或关闭_Python_Mysql_Odbc_Pyodbc - Fatal编程技术网

Python 检查pyodbc连接是否打开或关闭

Python 检查pyodbc连接是否打开或关闭,python,mysql,odbc,pyodbc,Python,Mysql,Odbc,Pyodbc,我经常遇到这样的错误:编程错误:光标的连接已关闭。 在我尝试执行查询之前,是否有方法检查我正在使用的连接是否已关闭 我正在考虑编写一个包装器来执行查询。首先,它将检查连接是否已关闭,如果已关闭,它将重新连接。这是一种可取的方法吗?您也可以使用鸭式键入。使用您需要的并捕获异常。99%的情况下,它可能是正常的。包装器是个好主意,但我不知道有什么API可以可靠地检查连接是否关闭 因此,解决方案应该是这样的: for retry in range(3): try: ... exe

我经常遇到这样的错误:
编程错误:光标的连接已关闭。

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


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

您也可以使用
鸭式键入。使用您需要的并捕获异常。99%的情况下,它可能是正常的。

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

另一个选项是检查是否可以获取光标(不管怎样,很多次这都是您希望从连接中获得的),否则重新初始化连接。它看起来像这样:

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

这不是一个好主意。pyodbc.ProgrammingError在很多情况下都会出现。使用它,您将看到许多重要的错误消息。