【问题标题】:psycopg2 cursor.copy_from() loading duplicates?psycopg2 cursor.copy_from() 加载重复项?
【发布时间】:2019-12-11 06:18:50
【问题描述】:

在 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() 作为查询插入到最终表中?

【问题讨论】:

    标签: python python-3.x postgresql psycopg2


    【解决方案1】:

    PostgreSQL v12 有一个用于COPY ... FROMWHERE 子句,但您不能在那里使用子查询。

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

    【讨论】:

      猜你喜欢
      • 2011-03-30
      • 2011-06-17
      • 1970-01-01
      • 2019-11-30
      • 2016-09-30
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多