REF 整合性ルールを使用して、データベースに 10,000 レコードをいくつか挿入しています。残念ながら、一部のデータ行は重複しています (データベースに既に存在するため)。挿入する前にデータベース内のすべての行の存在をチェックするのはコストがかかりすぎるため、SQLAlchemy によってスローされた IntegrityError 例外を処理し、エラーをログに記録してから続行するつもりです。
私のコードは次のようになります。
# establish connection to db etc.
tbl = obtain_binding_to_sqlalchemy_orm()
datarows = load_rows_to_import()
try:
conn.execute(tbl.insert(), datarows)
except IntegrityError as ie:
# eat error and keep going
except Exception as e:
# do something else
上記で行っている (暗黙の) 仮定は、SQLAlchemy が複数の挿入を 1 つのトランザクションにまとめていないということです。私の仮定が間違っている場合、IntegrityError が発生すると、残りの挿入が中止されることを意味します。上記の疑似コード「パターン」が期待どおりに機能するかどうかを誰かが確認できますか?または、 IntegrityError 例外がスローされた結果、データが失われるのでしょうか?
また、誰かがこれを行うためのより良いアイデアを持っている場合は、私はそれを聞くことに興味があります.