如何在将连接交给应用代码之前检查SQLAlchemy中的池连接?

6 投票
1 回答
2287 浏览
提问于 2025-04-16 09:43

我们有一个不太可靠的数据库服务器,原因有很多,因此有时候我应用程序用的数据库连接会突然消失。这些连接是用SQLAlchemy 0.6.5连接到PostgreSQL数据库的,运行在Pylons 1.0的网络环境中。

我想要一种方法,能够在用户看不到错误的情况下捕捉到大部分这种情况;理想情况下,我希望在从引擎返回连接之前,先在连接池层面测试一下连接。我可以控制引擎的创建,所以这方面我没问题。

有什么好的(最符合习惯/最简洁的)方法来实现这个呢?我知道在检查和使用之间,连接可能会死掉,但在这种环境下,这种情况非常少见,所以我对此并不担心。

1 个回答

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 这个功能。

撰写回答