python - Postgresql 如何使用 CSV COPY TO STDIN 进行冲突更新?

标签 python postgresql csv stdin psycopg2

我想做

 " on conflict (time) do update set name , description "

但我不知道何时将 stdin 与 csv 一起使用,我不知道什么名称等于什么?和描述等于什么...

表_a:

enter image description here

xxx.csv:

enter image description here

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/

相关文章:

java - 如果我使用一个语句来选择属性,然后使用 1 个带有多个 sql 查询的准备语句,是否需要使用连接池

python - 在 python 中使用 ord() 作为轮椅符号时出错

hibernate - 如何在hql中使用来自select的更新?

python |实例化前的类方法装饰器

postgresql - Neo4j 代替关系数据库

python - 自动将 CSV 导入 Outlook 日历

javascript - 如何在D3.js中的svg上显示直线?

python - 连接多个数据帧。数据路径问题

python - Anaconda ImportError : libSM. so.6: 无法打开共享对象文件: 没有那个文件或目录

python - mypy 可以检查文档字符串吗?