使用Blaze的Odo添加到数据库时忽略重复的行

时间:2015-11-02 15:06:25

标签: postgresql pandas psycopg2 blaze

如何在使用Blaze Odo的postgres数据库中存储数据框时忽略重复的行?

例如,我存储前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  ...

我该怎么做?如果数据库有数百万行,那么从DB加载ID值并检查重复项对我来说似乎很昂贵。还有更好的选择吗? 像这样:

INSERT...ON DUPLICATE KEY IGNORE

Blaze:0.8.3,Postgres:9.4.4,Psycopg2:2.6.1

1 个答案:

答案 0 :(得分:1)

odo的数据模型仅支持附加,而不支持合并。您需要先删除重复项,然后再将其传递给odo,或者使用数据库删除重复项。尝试添加自动增量字段,并将其设置为主键。这将解决您在插入时遇到的IntegrityError问题,之后您可以删除重复项。