我有一个我想在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
是否也被回滚?
谢谢您。
1条答案
按热度按时间rekjcdws1#
整个事务将回滚。您可以添加
select 1/0;
语句之间的删除和插入,或插入后,然后通过一个单独的连接(与psql是罚款)检查数据没有改变,以确认这一点。(psycopg2确实有一个autocommit选项,它在每条语句后都执行提交,但它在默认情况下是关闭的,我从未见过它使用irl。)