如何在将连接交给应用代码之前检查SQLAlchemy中的池连接?
我们有一个不太可靠的数据库服务器,原因有很多,因此有时候我应用程序用的数据库连接会突然消失。这些连接是用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
这个功能。