两个同时的psycopg2事务

2024-06-23 03:43:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图弄清楚如何使用psycopg2执行以下操作:我有一个脚本,它实例化两个到两个不同数据库的连接,每个连接都有自己的游标。目标是从数据库1中的表中删除数据,并将删除的数据写入数据库2。我希望以事务性的方式执行此操作,即执行以下操作:

  1. 开始事务:连接1,Cur 1->;从中删除。。。 返回数据使用连接2将数据插入数据库2, cur 2 3)如果步骤2成功,提交Delete From事务 并提交更新事务

我遇到的问题是,即使我使用两个独立的连接/游标,每个数据库一个(都关闭了autocommit),只要执行execute with cursor 2,cursor 1就会自动提交

con1 = psycopg2.connect(....)
con1.autocommit= False
cur1 = con1.cursor()

con2 = psycopg2.connect(....)
con2.autocommit= False
cur2 = con2.cursor()

cur1.execute(delete from ... returning)
cur.fetchone().... -> data[]

try:
 cur2.execute(insert ... data[])
 con2.commit()
 con1.commit()
except:
 con1.rollback()
 con2.rollback()

这里的基本思想是,如果连接2上的insert查询由于任何原因失败,则回滚连接1上的delete查询

任何帮助都将不胜感激


Tags: 数据数据库falseexecuteconnect事务cursorpsycopg2

热门问题