flask清空mysql_Flask、SQLAlchemy和MySQL服务器已经消失了

下面的解决方案适合我。服务器连接错误是在自定义会话和查询(对于ORM查询)类的方法中处理的。在from sqlalchemy import exc, create_engine, MetaData

from sqlalchemy.orm import scoped_session, sessionmaker, Session, Query

MAX_RETRIES = 2

class RetryQuery(Query):

def _execute_and_instances(self, *args, **kwargs):

retry = MAX_RETRIES

while retry:

retry -= 1

try:

return super(RetryQuery, self)._execute_and_instances(*args, **kwargs)

except exc.SQLAlchemyError as e:

if e.orig.args[0] in (2006, 2013, 2014, 2045, 2055) and retry and e.connection_invalidated:

continue

else:

raise

class RetrySession(Session):

def __init__(self, *args, **kwargs):

kwargs['query_cls'] = RetryQuery

super(RetrySession, self).__init__(*args, **kwargs)

def execute(self, *args, **kwargs):

retry = MAX_RETRIES

while retry:

retry -= 1

try:

return super(ReconnSession, self).execute(*args, **kwargs)

except exc.SQLAlchemyError as e:

if e.orig.args[0] in (2006, 2013, 2014, 2045, 2055) and retry and e.connection_invalidated:

continue

else:

raise

engine = create_engine(config.SQLALCHEMY_DATABASE_URI, pool_recycle=3600, isolation_level='READ_COMMITTED')

db_session = scoped_session(class_=RetrySession, sessionmaker(autocommit=True, bind=engine))

db_session.execute("SELECT col FROM table")

db_session.query(User).all()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值