2015-11-02 16 views
0

如何在使用Blaze的0123g將數據框存儲在postgres數據庫時忽略重複行?在使用Blaze的Odo添加到數據庫時忽略重複行

例如,我的第一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 ... 

我該怎麼做?從數據庫加載ID值和檢查重複對我來說似乎是昂貴的,如果數據庫有數百萬行。有沒有更好的選擇? 事情是這樣的:

INSERT...ON DUPLICATE KEY IGNORE 

大火:0.8.3,Postgres的:9.4.4,Psycopg2:2.6.1

+0

在寫入db之前,您可以不丟掉dups嗎? 'df.drop_duplicates()'你可以選擇傳遞你的ID列'df.drop_duplicates('ID')'實際上是想刪除重複的行? – EdChum

+0

是的,但即使在此之後,我也不知道這些唯一ID中的一些是否已經存在於數據庫中。 – Kevad

+1

您可以從數據庫中讀取ID並將其過濾掉 – EdChum

回答

1

odo的數據模型僅支持附加,而不是合併。您需要在傳遞odo之前刪除重複項,或使用數據庫刪除重複項。嘗試添加一個自動增量字段,並將其設置爲主鍵。這將在插入時解決您的問題IntegrityError,然後您可以刪除重複項。