2016-04-08 26 views
2

user_dataという名前のテーブルと、一意のキーとしてiduser_idという列があります。いくつかの履歴データをこのテーブルにインポートしたいと思います。私はbulk_insert_mappingsメソッドを使用してデータをバッチ挿入します。しかし、以下のようなエラーがあります。SQLAlchemy - 一括挿入無視: "重複エントリ"

IntegrityError: (pymysql.err.IntegrityError) (1062, u"Duplicate entry '1-1234' for key 'idx_on_id_and_user_id'")

このエラーを無視し、バッチインサートすると重複するデータを破棄する方法はありますか?

+0

私は、あなたが主キーまたは問題 –

+0

私は重複する値がある知っているが、私は履歴データを変更することはできませんが原因となっている固有のキーフィールドで同様の値を入力されている可能性があり、あなたのモデルをご確認ください。エラーを無視して、挿入操作を続行します。これは、mysqlの 'insert ignore ...'と同じです。 – pangpang

答えて

1

すべてのエラーを処理する必要があります。しかし、本当にすべてのエラーを無視したいのであれば、実際に一括挿入を行うことはできません。場合によっては、インポートする実際のデータに整合性エラーが発生することがあります。 1つずつ挿入して無視する必要があります。私は一度だけスクリプトでこれを使用します。

for item in dict_list: 
    try: 
     session.merge(orm(**item)) 
     session.commit() 
    except Exception as e: 
     session.rollback()