1
我在Python類的__init__
方法中創建數據庫連接,並希望確保在對象銷燬時關閉連接。
看起來我可以在__del__()
中做到這一點,或使該類成爲上下文管理器並關閉__exit__()
中的連接。我想知道哪一個更加Pythonic。什麼是關閉Python對象使用的psycopg2連接的首選方式?
我在Python類的__init__
方法中創建數據庫連接,並希望確保在對象銷燬時關閉連接。
看起來我可以在__del__()
中做到這一點,或使該類成爲上下文管理器並關閉__exit__()
中的連接。我想知道哪一個更加Pythonic。什麼是關閉Python對象使用的psycopg2連接的首選方式?
它看起來像我能做到這一點
__del__()
或使課堂上下文管理器並關閉__exit__()
連接。我想知道哪一個更加Pythonic。
我不會有什麼更「Python化」發表評論,因爲這是一個非常主觀問題。
但是,Python並沒有對何時調用析構函數做出非常嚴格的保證,使得上下文/ __exit__
在這裏接近正確。
我也使用上下文管理器來做到這一點。它運行良好,但是需要做的是確保所有連接都通過上下文管理器調用,否則您不會釋放它們。也許使用\ __ exit__ **和** \ __ del__?我沒有那樣做 - 寫了一些代碼來檢查堆棧,並且如果它不是上下文管理器調用,則拋出異常。 –
只是不建立'__enter__'方法之外的連接。問題解決了。 –
啊,啊。聰明。我會看看我是否重構我的代碼來做到這一點。否則,是的上下文管理員很酷。啊,另一件事,他們確實強制實例生命週期的一些約束 - 我的連接在django視圖上啓動,並在響應發送時終止。我必須重構其他類,這些類傾向於保留數據庫連接,並將連接作爲參數傳遞給它們的方法。 –