加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读