我正在尝试使用
psycopg2 copy_expert
将大型 csv 文件插入到 PSQL 表中。然而,我有 3 个限制:
我目前正在使用
DictReader
循环 csv 上的每一列,然后执行 INSERT INTO
表。但是,这非常慢,但我还没有看到任何 copy_expert
的示例,您可以在其中重命名列并添加额外的列。
csv 文件:
timer;A1;A2;A3;A4;UnitMeasureent
2023-02-22 10:11:00.000000;1.25;2.14;1.00;5.65;eur
2023-02-23 10:11:00.000000;1.12;3.10;1.02;5.65;eur
PSQL 表:
CREATE TABLE public.data(
serial_number VARCHAR NOT NULL,
global_id VARCHAR NOT NULL,
a1 double precision,
a2 double precision,
a4 double precision,
unit_measurement varchar(50)
);
serial_number
列在插入期间应始终为S01
,并且global_id
GER
。插入后的结果应该是:
serial_number;global_id;a1;A2;a4;unit_measurement
S01;GER;1.25;2.14;5.65;eur
S01;GER;1.12;3.10;5.65;eur
您无需根据 COPY 重命名列:
标题
指定文件包含标题行,其中包含文件中每列的名称。输出时,第一行包含表中的列名称。输入时,当此选项设置为 true(或等效的布尔值)时,第一行将被丢弃。如果此选项设置为 MATCH,则标题行中的列数和列名必须按顺序与表的实际列名匹配;否则会引发错误。使用二进制格式时不允许使用此选项。 MATCH 选项仅对 COPY FROM 命令有效。
所以要么不要标题,要么设置
HEADER true
。这意味着您现在只需在单独的操作中迭代 CSV 文件,删除不需要的列并按顺序插入所需的列。