13

CSV ファイルから SQLite テーブルに行のバッチを挿入するために使用cursor.executemanyしていますが、その一部は主キー フィールドに基づいて重複していると予想されます。コマンドを実行すると、予想どおり整合性エラーが発生し、何も挿入されません。

事前に手動で除外することなく、重複していない行のみを選択的に挿入するにはどうすればよいですか? 純粋な Python だけでエラー例外を作成し、重複行をスキップできることを知っています。このユースケースで実装できる同様のものはありますか?

4

3 に答える 3

27

単にINSERT OR IGNORE重複を無視するために使用します。

http://sqlite.org/lang_insert.html

于 2012-12-01T22:02:34.893 に答える
4

1 つのオプションは、を使用する代わりに、エラー キャッチを使用してループを手動で書き出すことexecutemanyです。

擬似コード:

for row in csvfile:
   try:
       cursor.execute('INSERT INTO X (Y) VALUES (%s)' % row[rowdatapoint])
   except IntegrityError:
       pass

おそらく ほど効率的ではありませんexecutemanyが、巨大なINSERTSQL 文字列を事前に生成する必要がある可能性のある、より複雑な SQL 変更に入る前にエラーをキャッチします。

于 2012-12-01T20:53:42.863 に答える