我正在尝试使用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'
,但仍然没有写入任何内容。
答案 0 :(得分:1)
我设法让它工作,这是如何:
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)