Đã có một cuộc thảo luận về vấn đề này và tài liệu này mô tả vấn đề khá tốt, vì vậy tôi đã sử dụng phương pháp được đề xuất của họ để xử lý các lỗi như vậy:http://discorporate.us/jek/talks/SQLAlchemy-EuroPython2010.pdf
Nó trông giống như thế này:
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)