如何在sqlalchemy中正确关闭mysql连接?

儿子 :

我想知道关闭中所有mysql连接的正确方法是什么sqlalchemy对于上下文,它是一个Flask应用程序,所有视图共享同一session对象。

engine = create_engine("mysql+pymysql://root:[email protected]/my_database")

make_session = sessionmaker(bind=engine, autocommit=False)

session = ScopedSession(make_session)()

当应用程序被拆除时,它session会关闭并engine丢弃

session.close()
engine.dispose()

但是根据数据库日志,我仍然有很多错误,例如[Warning] Aborted connection 940 to db: 'master' user: 'root' host: '172.19.0.7' (Got an error reading communication packets)

我尝试了一些解决方案,包括致电gc.collect()engine.pool.dispose()但没有成功...

我怀疑幕后引擎仍然打开了一些连接,需要将它们关闭。无论如何,有没有列出引擎打开的所有会话/连接的清单?

在花了很多时间之后,任何建议/帮助/指针将不胜感激!谢谢。

PS:disposeclose调用的灵感来自于如何在MySQL中关闭sqlalchemy连接顺便说一句,什么是“签出”连接?

儿子 :

最终,我找到了罪魁祸首:在后台进程中启动apscheduler使用了session与数据库连接,并且似乎没有正确释放它。

我们发现在Flask应用程序中处理sqlalchemy会话的最佳实践是使用scoped_session并确保remove()在请求结束时调用它(即appcontext_teardown)。这也用在flask-sqlalchemy扩展中

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章