之前在使用SQLAlchemy時都是用完程序就結束了,所以並沒有管連接的問題。但是這兩天需要建立一個服務,以每幾天訪問一次的頻率對數據庫進行訪問。
MySQL服務端會檢測每個鏈接在一段時間內是否有訪問。在默認值的情況下,如果28800s內沒有指令,一直是Sleep的狀態,那么就會把這個鏈接關閉。這樣當下次session再次連接時,就無法找到可用的連接了。
找到了兩個解決方案。一個是不用QueuePool,用NullPool。這樣的優點在於建立連接與否都是自己控制;缺點在於高並發時頻繁連接關閉損耗很大。這個帖子詳細說明了QueuePool的用法。http://www.tuicool.com/articles/Ybmemy
第二個解決方案就是設置回收時間。http://blog.csdn.net/u013673976/article/details/45939297
如果在沒有回收的情況下鏈接斷裂,那么會返回2013錯誤。如果回收時間設置的很短,那么2013錯誤就幾乎不會發生。當服務器關閉時,只需要捕獲2003錯誤就好。
