1

トランザクションがコミットされたときに IntegrityError 例外が発生する可能性があることを適切に処理したいのですが、一見すると、それを実装するための 2 つの選択肢が見えますが、両方が正しいかどうかはわかりません。

:PostgreSQLを使用しています

# alternative one
try:
  with transaction.commit_on_success():
    # db operation 1
    # db operation 2
except IntegrityError:
    transaction.rollback()

#alternative two
with transaction.commit_manually():
  sid = transaction.savepoint()
  # db operation 1
  # db operation 2
  try:
    transaction.savepoint_commit(sid)
  except IntegrityError:
    transaction.savepoint_rollback(sid)
4

1 に答える 1

0

IntegrityError が発生した場合は、transaction.rollback() を使用してトランザクション全体をロールバックします。トランザクションの一部だけをロールバックしたい場合は、transaction.savepoint() を使用してください。トランザクション全体に対してセーブポイントが 1 つしかない場合は、transaction.rollback() と同じ効果があります。

于 2012-10-30T14:56:07.430 に答える