gpt4 book ai didi

python - 使用 SQLAlchemy 在不经常使用的 Python/Flask 服务器上避免 "MySQL server has gone away"

转载 作者:IT老高 更新时间:2023-10-28 12:56:58 27 4
gpt4 key购买 nike

如果不存在,如何配置 Flask/SQLAlchemy 以创建新的数据库连接?

我有一个不常访问的 Python/Flask 服务器,它使用 SQLAlchemy。它每隔几天就会被访问一次,并且在第一次访问时它经常会抛出一个“MySQL 服务器已经消失”的错误。后续的页面浏览量都很好,但是出现这个初始错误看起来很不专业。

我想知道处理此问题的正确方法 - 诸如“请假很长时间”之类的建议(在这种情况下大约需要 4 天)似乎不正确。如何测试是否缺少数据库连接并在需要时创建一个?

最佳答案

我之前遇到过这个问题,发现处理它的方法是不保留 session 。问题是你试图保持连接打开太久。相反,在 __init__.py 或在任何地方都导入的实用程序包中使用线程本地范围 session :

from sqlalchemy.orm import scoped_session, sessionmaker
Session = scoped_session( sessionmaker() )

然后设置您的引擎和元数据一次。这允许您在每次连接/断开连接时跳过配置机制。之后,您可以像这样进行数据库工作:

session = Session()
someObject = session.query( someMappedClass ).get( someId )
# use session like normal ...
session.close()

如果您想保留旧对象并且不想让 session 保持打开状态,那么您可以使用上述模式并像这样重用旧对象:

session = Session()
someObject = session.merge( someObject )
# more db stuff
session.close()

关键是,您要打开 session ,完成工作,然后关闭 session 。这很好地避免了超时。 .merge 和 .add 有很多选项,允许您包含对分离对象所做的更改或从数据库加载新数据。文档非常冗长,但是一旦您知道要查找的内容,可能会更容易找到。

要真正做到这一点并防止 MySQL “消失”,您需要解决连接池保持连接打开时间过长并为您检查旧连接的问题。

要获得新的连接,您可以在 create_engine 调用中设置 pool_recycle 选项。将此 pool_recycle 设置为检查之间连接池中您希望创建新连接而不是返回现有连接的秒数。

关于python - 使用 SQLAlchemy 在不经常使用的 Python/Flask 服务器上避免 "MySQL server has gone away",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6471549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com