之前在使用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错误就好。