0

Blaze のOdoを使用して postgres DB にデータフレームを保存するときに、重複行を無視するにはどうすればよいですか?

たとえば、次のように最初の 3 行を保存します。

>>> odo(df[:3], 'postgresql:///my_db::my_table')

my_table主キーとして列IDを持ちます。さらにいくつか追加する場合、今回は前の最後の行を含めて、その行をスキップして、それを取得する代わりに他の行を追加しIntegrityErrorます。

>>> odo(df[2:5], 'postgresql:///my_db::my_table')

    IntegrityError: (psycopg2.IntegrityError) duplicate key value violates unique constraint  ...

どうやってやるの?IDDB に何百万もの行がある場合、DB から値をロードして重複をチェックするのはコストがかかるように思えます。より良い代替手段はありますか?このようなもの:

INSERT...ON DUPLICATE KEY IGNORE

ブレイズ: 0.8.3、Postgres: 9.4.4、Psycopg2: 2.6.1

4

1 に答える 1

1

のデータ モデルodoは追加のみをサポートし、マージはサポートしません。を通過させる前に重複を削除するかodo、データベースを使用して重複を削除する必要があります。自動インクリメント フィールドを追加して、主キーとして設定してみてください。これにより、挿入時の問題が修正IntegrityErrorされ、その後重複を削除できます。

于 2016-01-25T19:56:31.660 に答える