处理SQLAlchemy断开连接

时间:2012-09-18 10:19:25

标签: python mysql sqlalchemy

我使用SQLAlchemy作为我的Flask应用程序,我刚刚遇到一些与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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

Django的另一个选择 - 根本就没有持久连接。当然它的速度要慢很多,但如果项目规模较小 - 它应该可以胜任。关于它:http://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.NullPool

答案 1 :(得分:1)

最好使用sqlalchemy和poolclass = NullPoll(非持久连接)对具有高流量的proyects,因为有太多的连接并入

为了我的经验,我总是使用slqalchemy这个功能