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

Chr*_*s R 6 python pylons sqlalchemy

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

我想要的是在没有用户可见错误的情况下捕获大部分内容的某种方法; 理想情况下,我会在从引擎返回之前测试池级别的连接.我控制引擎的创建,所以我没关系.

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

nos*_*klo 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 
Run Code Online (Sandbox Code Playgroud)

留给您的是如何针对is_valid_connection您的用例实施。