我經常會收到這樣的錯誤:ProgrammingError: The cursor's connection has been closed.
檢查pyodbc連接是打開還是關閉
有沒有一種方法來檢查是否之前,我試圖執行一個查詢我使用的連接已經關閉?
我正在考慮編寫一個包裝來執行查詢。首先它會檢查連接是否關閉,如果是,它會重新連接。這是一個明智的做法嗎?
我經常會收到這樣的錯誤:ProgrammingError: The cursor's connection has been closed.
檢查pyodbc連接是打開還是關閉
有沒有一種方法來檢查是否之前,我試圖執行一個查詢我使用的連接已經關閉?
我正在考慮編寫一個包裝來執行查詢。首先它會檢查連接是否關閉,如果是,它會重新連接。這是一個明智的做法嗎?
包裝是一個好主意,但我不知道任何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
你也可以做duck typing
。使用你需要的,並捕捉異常。 99%的時間很可能是確定的。
另一種選擇是檢查如果你能得到一個光標(很多次,就是你從無論如何連接想要什麼)和重新初始化否則連接。它看起來像這樣:
try:
cursor = conn.cursor()
except e:
if e.__class__ == pyodbc.ProgrammingError:
conn == reinit()
cursor = conn.cursor()