如何使用SQLAlchemy处理两阶段提交
发布时间:2020-12-20 13:26:20 所属栏目:Python 来源:网络整理
导读:我正在尝试使用SQLalchemy 0.6.8与 Postgresql 8.3.4进行两阶段提交,但我想我错过了一些东西…… 工作流程如下: session = sessionmaker(engine)(autocommit=True)tx = session.connection().begin_twophase(xid) # Doesn't issue any SQLsession.begin()se
我正在尝试使用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’,但仍然没有写入任何内容. 解决方法
我设法让它工作,这是如何:
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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |