首页 > 解决方案 > psycopg2 cursor.copy_from() 加载重复项?

问题描述

在 Python 中使用 psycopg2 包将数据从 CSV 文件加载到 Postgres 中的表中。此 CSV 文件每小时重新生成一次,与其他时间的文件相比,文件中可能存在重复项。一些示例代码如下所示:

import psycopg2

conn = psycopg2.connect(user='postgres',password='password',database='postgres')
cur = conn.cursor()

file = open('test.csv','r')
cur.copy_from(file,'table',sep=',')
conn.commit()
cur.close()
conn.close()

我很确定这种方法不考虑重复,是否有另一种方法可以直接考虑重复,或者最好将 CSV 保存到临时表并使用 cur.execute() 作为查询插入进入决赛桌?

标签: pythonpython-3.xpostgresqlpsycopg2

解决方案


PostgreSQL v12 有一个WHERE子句 for COPY ... FROM,但你不能在那里使用子查询。

所以唯一的选择是加载到一个临时表,然后INSERT ... ON CONFLICT用来更新数据。


推荐阅读