REF整合性ルールを使用して、いくつかの10kレコードをデータベースに挿入します。いくつかのデータ行は残念ながら重複しています(データベース内にすでに存在しています)。 SQLAlchemyによってスローされたIntegrityError例外を処理し、エラーを記録してから続行するつもりであるため、挿入する前にデータベースのすべての行が存在するかどうかをチェックするのは高価です。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例外の結果としてデータを失うことになりますか?
また、誰かがこれを行うより良いアイデアを持っているなら、私はそれを聞くことに興味があります。