postgres-使用psycopg在单个事务中执行多个操作

lymnna71  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(428)

我有一个我想在postgres中运行的查询。
它删除,然后插入(有点实现了一种丑陋的升级方式,不幸的是在我的场景中需要这种方式)。

cursor, connection = get_pgsql_connection(...)

query = '''
     delete from table where name = 'xyz';
     insert into table (name, value, place) values
     ('A', 1, 0),
     ('B', 4, 1),
     ('C', 6, 2);
'''
cursor.execute(query)
connection.commit()
connection.close()

问题是:如果在这个查询中由于任何原因失败了,那么整个操作(即。 delete + insert )是否中止?例如,如果 delete 如果失败,将中止插入吗?或者类似的当 insert 如果失败了 delete 是否也被回滚?
谢谢您。

rekjcdws

rekjcdws1#

整个事务将回滚。您可以添加 select 1/0; 语句之间的删除和插入,或插入后,然后通过一个单独的连接(与psql是罚款)检查数据没有改变,以确认这一点。
(psycopg2确实有一个autocommit选项,它在每条语句后都执行提交,但它在默认情况下是关闭的,我从未见过它使用irl。)

相关问题