psycopg2.copy_expert - 只插入新数据

psycopg2.copy_expert - insert only new data

我正在使用 psycopg2.copy_expert 将数据从 CSV 复制到 PostgreSQL 数据库。我 运行 每天都这样,我只想插入新数据。如果数据已经存在,则无需执行任何操作。有没有办法利用 copy_expert 函数开箱即用地执行此操作,还是我自己编写逻辑代码并创建一个仅包含增量更改的新 CSV 文件?

copy_sql = """
           COPY %s FROM stdin WITH CSV HEADER
           DELIMITER as ','
           """
f = open(f"{file_path}", 'r', encoding="utf-8")
cur.copy_expert(sql=copy_sql % table_name, file=f)

您可以使用 temporary table 结合 ON CONFLICT 来实现:

CREATE TEMPORARY TABLE buffer (
    field1,
    field2,
    ...
    fieldn
);

COPY buffer FROM STDIN With CSV HEADER DELIMITER as ',';

INSERT INTO table(field1, field2, ... fieldn)
SELECT field1, field2, ... fieldn FROM buffer
ON CONFLICT (ID) DO NOTHING;

DROP TABLE buffer;

您应该能够将上面的 querycopy_expert.

的文件句柄一起使用