2

我在我的 Flask 应用程序中使用 SQLAlchemy,我刚刚遇到了一些与我的 MySQL 数据库关闭连接的问题。

我在我的__init__.py

engine = create_engine('mysql://user:pass@localhost/db', pool_recycle=3600)
db = SQLAlchemy(app)

(我使用两种方式来查询我的数据库)

我刚刚添加了 pool_recycle 设置,但我想确保可以重新启动丢失的连接。

阅读以下部分: http ://docs.sqlalchemy.org/en/latest/core/pooling.html#disconnect-handling-pessimistic

我不确定如何实际使用此代码,我不想每次在代码中使用它时都检查连接,而是如果连接关闭则重新启动连接。是否可以添加一个通用事件来处理数据库断开连接?

4

2 回答 2

1

最好在高流量的项目上使用带有 poolclass=NullPoll(非持久连接)的 sqlalchemy,因为并发的连接太多

对于我的经验,我总是使用带有此功能的 slqalchemy

于 2013-11-06T20:55:10.967 回答
1

我认为这里的问题是应用程序本身仅在尝试使用它时才知道连接是否断开。就好像您登录了一个网站,但刷新后您的会话已死,因此要求再次登录。直到您刷新 - 您已登录。薛定谔的猫?

我刚刚遇到了同样的问题。到目前为止,似乎使用 pool_recycle 是可行的方法,如果发生错误,则情人回收时间或编辑 mySQL 的配置。

正如文档所暗示的那样 - 您定期检查以太,或者期望出现错误(如在 Java 中,只需尝试:除了:类方法中的所有内容并使用它们)或者只是不时刷新以希望连接正常。在这种情况下,悲观的方法确实会在您使用数据库之前定期进行检查。这是最安全的方式,但正如你所提到的 - 很脏。

作为 Django 的另一种选择 - 根本没有持久连接。当然它要慢得多,但如果项目较小 - 它应该可以完成这项工作。关于它:http ://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.NullPool

于 2012-10-18T11:25:32.330 回答