[英]flask-sqlalchemy lost connection to MySQL db
使用 MySQL 数据库和flask-sqlalchemy 我遇到了连接丢失错误( 'Lost connection to MySQL server during query'
)。 我已经将app.config['SQLALCHEMY_POOL_RECYCLE']
调整为小于engine timeout
。 我还添加了一个pool_pre_ping
,以确保在两次请求期间数据库不会消失。 现在我不知道了,这仍然是一个问题,因为据我了解,flask-sqlalchemy 应该正确处理打开和关闭会话。
作为一种解决方法,我想了一种方法来告诉flask-sqlalchemy 捕获丢失的连接响应并即时重新启动连接。 但我不知道该怎么做。 所以,我的问题是:
我不知道你的第一和第二个问题的答案,但对于第三个问题,我使用装饰器来包装我的所有函数,而不是直接在函数内部使用 try / except 。 显式的 pre_ping 和会话回滚/关闭不知何故也为我解决了丢失连接的问题(mariadb 是我使用的后端)!
def manage_session(f):
def inner(*args, **kwargs):
# MANUAL PRE PING
try:
db.session.execute("SELECT 1;")
db.session.commit()
except:
db.session.rollback()
finally:
db.session.close()
# SESSION COMMIT, ROLLBACK, CLOSE
try:
res = f(*args, **kwargs)
db.session.commit()
return res
except Exception as e:
db.session.rollback()
raise e
# OR return traceback.format_exc()
finally:
db.session.close()
return inner
然后用装饰器包装我的函数:
@manage_session
my_funtion(*args, **kwargs):
return "result"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.