gpt4 book ai didi

python - Postgres ON CONFLICT 只更新python中的非空值

转载 作者:行者123 更新时间:2023-12-03 20:25:47 24 4
gpt4 key购买 nike

我有一个表,在处理记录时,我要么得到完整记录,要么只得到要更新的列。

我想编写一个查询来处理更新,但只更新具有非空值的列。例如,

现有表:

1 | John Doe | USA
2 | Jane Doe | UK

传入记录:
(3, Kate Bill, Canada)
(2, null, USA)

我想插入第一条记录并在第二条记录上的键冲突时只更新最后一列。

我不确定如何使用 execute_values 方法调用来编写它:
execute_values(cursor, "INSERT INTO user_data\
(id, name, country) VALUES %s ON CONFLICT DO UPDATE SET \
<how to only set non null values here>", vendor_records)

我正在使用 psycopg2 来执行此操作。

最佳答案

on conflict (特别注意 do update set name = expression )您可以使用带有排除值的合并将列更新为指定值(如果不为空)或现有值(如果指定为空) ;
这将是那种格式:

-- setup  
create table test1(id integer primary key, col1 text,col2 text);
insert into test1(id, col1, col2)
values (1, 'John Doe', 'USA')
, (2, 'Jane Doe', 'UK');
select * from test1;

-- test on conflict
insert into test1 as t(id, col1, col2)
values (3, 'Kate Bill', 'Canada')
, (2, null, 'USA')
on conflict(id) do update
set col1 = coalesce(excluded.col1, t.col1)
, col2 = coalesce(excluded.col2, t.col2);

-- validate
select * from test1;

关于python - Postgres ON CONFLICT 只更新python中的非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61494958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com