我想做
" on conflict (time) do update set name , description "
但我不知道何时将 stdin 与 csv 一起使用,我不知道什么名称等于什么?和描述等于什么...
表_a:
xxx.csv:
with open('xxx/xxx.csv', 'r', encoding='utf8') as f:
sql = """
COPY table_a FROM STDIN With CSV on conflict (time)
do update set name=??, description=??;
"""
cur.copy_expert(sql, f)
conn.commit()
最佳答案
在this SO post ,有两个答案 - 结合在一起 - 为成功使用 ON CONFLICT
提供了一个很好的解决方案。下面的示例使用 ON CONFLICT DO NOTHING;
:
BEGIN;
CREATE TEMP TABLE tmp_table
(LIKE main_table INCLUDING DEFAULTS)
ON COMMIT DROP;
COPY tmp_table FROM 'full/file/name/here';
INSERT INTO main_table
SELECT *
FROM tmp_table
ON CONFLICT DO NOTHING;
COMMIT;
将 main_table 的两个实例替换为您的表的名称。
关于python - Postgresql 如何使用 CSV COPY TO STDIN 进行冲突更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019381/