解决sqlalchemy间隔长时间重连,提示mysql server has gone away

在构建tornado应用,采用SQLAlchemy作为ORM是一个比较不错的选择。使用SQLAlchemy,一般第一步需要用create_engine创建engine,但在一段时间不使用engine的时候,下次连接时会提示[2006]MySQL server has gone away的错误!如下图:
imgName

解决方法:

from sqlalchemy import create_engine, event
from sqlalchemy.exc import DisconnectionError

def checkout_listener(dbapi_con, con_record, con_proxy):
    try:
        try:
            dbapi_con.ping(False)
        except TypeError:
            dbapi_con.ping()
    except dbapi_con.OperationalError as exc:
        if exc.args[0] in (2006, 2013, 2014, 2045, 2055):
            raise DisconnectionError()
        else:
            raise

db_engine = create_engine(DATABASE_CONNECTION_INFO,
                          pool_size=100,
                          pool_recycle=3600)
event.listen(db_engine, 'checkout', checkout_listener)

参考文档:http://discorporate.us/jek/talks/SQLAlchemy-EuroPython2010.pdf