在将它们交给我的应用程序代码之前,如何检查SQLAlchemy中的池连接?

时间:2011-01-10 17:10:26

标签: python sqlalchemy pylons

由于各种原因,我们有一个稍微不可靠的数据库服务器,因此有时我的应用程序使用的数据库连接会从它下面消失。连接是SQLAlchemy 0.6.5连接到Pylons 1.0 Web运行时中的PostgreSQL数据库。

我想要的是在没有用户可见错误的情况下捕获大多数的方法;理想情况下,我会在从引擎返回之前测试池级别的连接。我控制引擎的创建,所以我很好。

实现这一目标的最佳(最通常/最干净)方法是什么?我意识到在检查和使用之间总是存在连接死亡的可能性,但在这种环境中这种情况很少见,因此对我来说不是一个问题。

1 个答案:

答案 0 :(得分:4)

您可以使用池侦听器:

class ConnectionChecker(sqlalchemy.interfaces.PoolListener):
    def checkout(self, dbapi_con, con_record, con_proxy):
        if not is_valid_connection(dbapi_con):
            # a new connection will be used
            raise sqlalchemy.exc.DisconnectionError 

留给您的是如何为您的用例实现is_valid_connection