python - 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() 作为查询插入进入决赛桌?
解决方案
PostgreSQL v12 有一个WHERE
子句 for COPY ... FROM
,但你不能在那里使用子查询。
所以唯一的选择是加载到一个临时表,然后INSERT ... ON CONFLICT
用来更新数据。
推荐阅读
- windows - 通过在 cmd 中设置环境变量在 PowerShell 中执行命令
- javascript - Office.js Powerpoint 获取幻灯片上的对象
- angular - 为什么角度路由会在 url 中添加标签 #
- c# - 在 ASP.NET MVC 视图中按顺序加载操作
- javascript - 多个日历,每个月在单个页面上,每个日期的事件颜色
- sql-server - 在单个查询中使用 CASE 更新 SQL 表中的多个列
- javascript - 我想使用 python 脚本在 html 中动态更新表格
- java - 使用带有 Android Room 的 @Insert 注释跳过 null
- git - 空格扩展以匹配 git 存储库
- python - SPSS 语法之外的 Python 函数