【发布时间】:2018-10-14 20:39:24
【问题描述】:
我正在将 CSV 文件导入 postgres,但数据集中没有唯一列。我想添加一个序列 ID 字段,以唯一标识每条记录插入到表中。
在触发导入之前,我已经创建了一个序列并在表结构中添加了一个 ID 字段:
CREATE SEQUENCE IF NOT EXISTS serial;
CREATE TABLE my_tbl (
fname varchar(100),
lname varchar(100),
company varchar(200),
id integer PRIMARY KEY DEFAULT nextval('serial')
);
我运行此代码来导入包含 fname、lname 和公司数据的 CSV:
conn = psycopg2.connect(dbname=dbname, host=host, port=port, user=user, password=pwd)
cur = conn.cursor()
cur.copy_expert("copy {} from STDIN CSV HEADER QUOTE '\"'".format(table_name), file)
cur.execute("commit;")
但是,我收到一条错误消息,提示我缺少字段“id”的数据。我假设在后台 psycopg2 匹配 CSV 和 PG 表的模式,以在尝试插入之前验证 COPY。常规插入会成功,因为 id 字段将使用 SEQ 中的值填充。
如何为从 CSV 复制到 PG 表的每条记录添加唯一的 id 字段?
【问题讨论】:
标签: python python-3.x postgresql csv psycopg2