2017-06-19 14 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') 
関連する問題