2012-09-18 140 views
2

我为我的Flask应用程序使用SQLAlchemy,并且我刚刚遇到了一些关闭连接到MySQL数据库的问题。处理SQLAlchemy断开连接

我设置我的连接像这样在我__init__.py

engine = create_engine('mysql://user:[email protected]/db', pool_recycle=3600) 
db = SQLAlchemy(app) 

(我用两种方式来查询我的DB)

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

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

我真的不知道如何实际使用此代码,我不希望在每次它在代码中使用了一次检查连接,而是有连接重新启动,如果它关闭。是否可以添加一般事件来处理数据库断开连接?

回答

1

我认为这里的问题是,应用程序本身只知道连接是否关闭,当它试图使用它。就好像你已经登录了一个网站,但是在刷新你的会话之后已经死了,因此要求重新登录。在您刷新之前 - 您已登录。薛定谔的猫?

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

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

作为Django的另一个选择 - 根本没有持久连接。肯定会慢很多,但如果项目更小 - 它应该完成这项工作。关于它:http://docs.sqlalchemy.org/en/latest/core/pooling.html#sqlalchemy.pool.NullPool

2

是与HIGHT交通proyects,因为有这么多的连接并行注解

我的expirience我总是用slqalchemy使用此功能更好地使用SQLAlchemy与poolclass = NullPoll(不持久连接)

相关问题