2012-06-01 67 views
3

我经常会收到这样的错误:ProgrammingError: The cursor's connection has been closed.检查pyodbc连接是打开还是关闭

有没有一种方法来检查是否之前,我试图执行一个查询我使用的连接已经关闭?

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

回答

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 
1

你也可以做duck typing。使用你需要的,并捕捉异常。 99%的时间很可能是确定的。

4

另一种选择是检查如果你能得到一个光标(很多次,就是你从无论如何连接想要什么)和重新初始化否则连接。它看起来像这样:

try: 
    cursor = conn.cursor() 
except e: 
    if e.__class__ == pyodbc.ProgrammingError:   
     conn == reinit() 
     cursor = conn.cursor() 
相关问题