我们一直在试验sqlalchemy的断开连接处理,以及它如何与ORM集成.我们已经研究了文档,建议似乎是捕获断开连接异常,发出rollback()
,然后重试代码.
如:
import sqlalchemy as SA
retry = 2
while retry:
retry -= 1
try:
for name in session.query(Names):
print name
break
except SA.exc.DBAPIError as exc:
if retry and exc.connection_invalidated:
session.rollback()
else:
raise
我遵循的基本原理是——您必须回滚所有活动事务并重播它们,以确保操作的顺序一致.
但是——这意味着要 for each 想要处理数据的函数添加大量额外的代码.此外,在SELECT
的情况下,我们没有修改数据,回滚/重新请求的概念不仅难看,而且违反了DRY原则(不要重复).
我想知道其他人是否介意分享他们如何处理sqlalchemy的断开连接.
仅供参考:我们正在使用sqlalchemy 0.9.8和Postgres 9.2.9