【发布时间】:2015-11-02 15:06:24
【问题描述】:
如何在使用 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 ...
我该怎么做?如果数据库有数百万行,从数据库加载ID 值并检查重复项对我来说似乎很昂贵。有没有更好的选择?
像这样的:
INSERT...ON DUPLICATE KEY IGNORE
Blaze:0.8.3,Postgres:9.4.4,Psycopg2:2.6.1
【问题讨论】:
-
在写入 db 之前你不能放弃 dups 吗?
df.drop_duplicates()您可以选择传递您的 ID 列df.drop_duplicates('ID'),不清楚您具体要问什么,您是要插入所有行并确保ID是唯一的,还是您真的想删除重复的行? -
是的,但即使在那之后,我也不知道其中一些唯一 ID 是否已经存在于数据库中。
-
您可以从数据库中读取 ID 并将其过滤掉
-
@EdChum 我更新了我的帖子...
标签: postgresql pandas psycopg2 blaze