我想知道关闭中所有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:dispose
和close
调用的灵感来自于如何在MySQL中关闭sqlalchemy连接。顺便说一句,什么是“签出”连接?
最终,我找到了罪魁祸首:在后台进程中启动的apscheduler使用了session
与数据库的连接,并且似乎没有正确释放它。
我们发现在Flask应用程序中处理sqlalchemy会话的最佳实践是使用scoped_session
并确保remove()
在请求结束时调用它(即appcontext_teardown
)。这也用在flask-sqlalchemy扩展中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句