如何在使用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
答案 0 :(得分:1)
odo
的数据模型仅支持附加,而不支持合并。您需要先删除重复项,然后再将其传递给odo
,或者使用数据库删除重复项。尝试添加自动增量字段,并将其设置为主键。这将解决您在插入时遇到的IntegrityError
问题,之后您可以删除重复项。