由于各种原因,我们有一个稍微不可靠的数据库服务器,因此有时我的应用程序使用的数据库连接会从它下面消失。连接是SQLAlchemy 0.6.5连接到Pylons 1.0 Web运行时中的PostgreSQL数据库。
我想要的是在没有用户可见错误的情况下捕获大多数的方法;理想情况下,我会在从引擎返回之前测试池级别的连接。我控制引擎的创建,所以我很好。
实现这一目标的最佳(最通常/最干净)方法是什么?我意识到在检查和使用之间总是存在连接死亡的可能性,但在这种环境中这种情况很少见,因此对我来说不是一个问题。
答案 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
。