您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

这个线程本地的Flask-SQLAchemy会话是否会导致“ MySQL服务器已消失”错误?

这个线程本地的Flask-SQLAchemy会话是否会导致“ MySQL服务器已消失”错误?

尝试添加

app.teardown_request(Exception=None)

装饰器,在每个请求结束时执行。我目前正在遇到类似的问题,好像今天我实际上已经使用解决了。

@app.teardown_request
def teardown_request(exception=None):
    Session.remove()
    if exception and Session.is_active:
        print(exception)
        Session.rollback()

我不使用Flask-sqlAlchemyOnly Raw sqlAlchemy,所以它可能对您有所不同。

来自文档

拆卸回调是特殊的回调,因为它们在不同的位置执行。严格来讲,它们与实际的请求处理无关,因为它们绑定到RequestContext对象的生命周期。弹出请求上下文时,将调用teardown_request()函数

就我而言,我scoped_session为每个请求都打开一个文件,要求我在每个请求结束时将其删除Flask- sqlAlchemy可能不需要这个)。同样,Exception如果在上下文期间发生了一次,则会传递teardown_request函数在这种情况下,如果发生异常(可能导致不删除事务或需要回滚),我们将检查是否存在异常,然后回滚。

如果这对于我自己的测试不起作用,那么我接下来要做的就是session.commit()每次拆解时,确保所有东西都在冲洗

更新:8小时后,MysqL也似乎使连接无效,从而导致会话被破坏。

设置pool_recycle=3600你的发动机配置,或设置<MysqL的超时。结合适当的会话范围(结束会话)应该可以做到这一点。

Python 2022/1/1 18:33:31 有517人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶