如何使用SQLAlchemy处理两阶段提交
我正在尝试使用 SQLalchemy 0.6.8 和 Postgresql 8.3.4 来实现一个两阶段提交,但我觉得我可能漏掉了什么...
整个流程是这样的:
session = sessionmaker(engine)(autocommit=True)
tx = session.connection().begin_twophase(xid) # Doesn't issue any SQL
session.begin()
session.add(obj1)
session.flush()
tx.prepare()
然后在另一个会话中
session = sessionmaker(engine)(autocommit=True)
session.connection().commit_prepared(xid, recover=True) # recover=True because otherwise it complains that you can't issue a COMMIT PREPARED from inside a transaction
这没有报错,但也没有往表里写任何东西... O_o 我到底漏掉了什么?
我甚至尝试在 prepare()
之后阻止应用程序运行,然后在 pgadmin 中执行 COMMIT PREPARED 'xid'
,但还是没有写入任何内容。
1 个回答
7
我成功让它运行起来了,下面是我做的步骤:
session = sessionmaker(engine)(twophase=True)
session.add(obj1)
session.prepare()
# Find transaction id
for k, v in s.transaction._connections.iteritems():
if isinstance(k, Connection):
return v[1].xid
然后在另一个会话中
session = sessionmaker(engine)(twophase=True)
session.connection().commit_prepared(xid, recover=True)