2017-06-19 53 views
0

我有一个从旧数据库导入数据的脚本。一路上我遇到了独特的约束违规。我想修改查询,然后再执行它,但它说,“psycopg2.InternalError:当前事务被中止,忽略,直到事务块结束命令”:如何从psycopg2事务中的错误中恢复?

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

如何做到这一点,而无需切换到自动提交模式?

回答

0

灵感来自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')