psycopg2 copy_expert - 静态列

问题描述 投票:0回答:1

我正在尝试使用

psycopg2 copy_expert
将大型 csv 文件插入到 PSQL 表中。然而,我有 3 个限制:

  • 原始csv文件有7列,我只需要插入其中5列
  • 我需要重命名插入的 5 列
  • 我需要添加 2 个具有静态值的额外列

我目前正在使用

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
psycopg2 psql
1个回答
0
投票

您无需根据 COPY 重命名列:

标题

指定文件包含标题行,其中包含文件中每列的名称。输出时,第一行包含表中的列名称。输入时,当此选项设置为 true(或等效的布尔值)时,第一行将被丢弃。如果此选项设置为 MATCH,则标题行中的列数和列名必须按顺序与表的实际列名匹配;否则会引发错误。使用二进制格式时不允许使用此选项。 MATCH 选项仅对 COPY FROM 命令有效。

所以要么不要标题,要么设置

HEADER true
。这意味着您现在只需在单独的操作中迭代 CSV 文件,删除不需要的列并按顺序插入所需的列。

© www.soinside.com 2019 - 2024. All rights reserved.