如何从psycopg2的事务中恢复错误?

时间:2017-06-19 09:19:43

标签: postgresql python-3.x transactions psycopg2

我有一个从旧数据库导入数据的脚本。在某个地方,我遇到了唯一的约束违规。我想修改查询并再次执行它,但它说,“psycopg2.InternalError:当前事务被中止,命令被忽略,直到事务块结束”:

try:
    pcur.execute(sql, values)
except psycopg2.IntegrityError:
    value = ...
    pcur.execute(sql, values)

如何在不切换到自动提交模式的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

灵感来自this answer

pcur.execute('SAVEPOINT sp1')
try:
    pcur.execute(sql, values)
except psycopg2.IntegrityError:
    pcur.execute('ROLLBACK TO SAVEPOINT sp1')
    value = ...
    pcur.execute(sql, values)
else:
    pcur.execute('RELEASE SAVEPOINT sp1')