2012-09-18 142 views
2

我爲我的Flask應用程序使用SQLAlchemy,並且我剛剛遇到了一些關閉連接到MySQL數據庫的問題。處理SQLAlchemy斷開連接

我設置我的連接像這樣在我__init__.py

engine = create_engine('mysql://user:[email protected]/db', pool_recycle=3600) 
db = SQLAlchemy(app) 

(我用兩種方式來查詢我的DB)

我剛添加的pool_recycle設置,但我想確保丟失的連接可以重新啓動。

閱讀以下部分: http://docs.sqlalchemy.org/en/latest/core/pooling.html#disconnect-handling-pessimistic

我真的不知道如何實際使用此代碼,我不希望在每次它在代碼中使用了一次檢查連接,而是有連接重新啓動,如果它關閉。是否可以添加一般事件來處理數據庫斷開連接?

回答

1

我認爲這裏的問題是,應用程序本身只知道連接是否關閉,當它試圖使用它。就好像你已經登錄了一個網站,但是在刷新你的會話之後已經死了,因此要求重新登錄。在您刷新之前 - 您已登錄。薛定諤的貓?

我剛剛遇到了同樣的問題。到目前爲止,似乎使用pool_recycle是要走的路,如果發生錯誤,然後情人回收時間或編輯mySQL的配置。

正如文檔所暗示的那樣 - 你可以定期檢查,或者期望出現錯誤(比如在Java中,只需嘗試:除非:類方法中的所有內容並使用它們),或者只是不時刷新所有希望連接已啓動。在這種情況下,在使用數據庫之前,悲觀方法會定期執行檢查。這是最安全的方式,但正如你所說 - 非常骯髒。

作爲Django的另一個選擇 - 根本沒有持久連接。肯定會慢很多,但如果項目更小 - 它應該完成這項工作。關於它:http://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.NullPool

2

是與HIGHT交通proyects,因爲有這麼多的連接並行註解

我的expirience我總是用slqalchemy使用此功能更好地使用SQLAlchemy與poolclass = NullPoll(不持久連接)

相關問題