2012-06-01 65 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() 
相關問題