gpt4 book ai didi

postgresql - Psycopg2:如何使用 psycopg2 和 python 插入和更新冲突?

转载 作者:行者123 更新时间:2023-12-04 00:57:51 25 4
gpt4 key购买 nike

我正在使用 psycopg2 将命令插入 postgres 数据库,当有冲突时,我只想更新其他列值。

这是查询:

        insert_sql = '''
INSERT INTO tablename (col1, col2, col3,col4)
VALUES (%s, %s, %s, %s) (val1,val2,val3,val4)
ON CONFLICT (col1)
DO UPDATE SET
(col2, col3, col4)
= (val2, val3, val4) ; '''

cur.excecute(insert_sql)

我想找出我做错了什么?我使用的变量 val1 、 val2 、 val3 不是实际值。

最佳答案

引用 psycopg2 的 documentation :
警告永远,永远,永远不要使用 Python 字符串连接 (+) 或字符串参数插值 (%) 将变量传递给 SQL 查询字符串。甚至在 Guzzle 下也没有。
现在,对于 upsert 操作,您可以这样做:

insert_sql = '''
INSERT INTO tablename (col1, col2, col3, col4)
VALUES (%s, %s, %s, %s)
ON CONFLICT (col1) DO UPDATE SET
(col2, col3, col4) = (EXCLUDED.col2, EXCLUDED.col3, EXCLUDED.col4);
'''
cur.execute(insert_sql, (val1, val2, val3, val4))
请注意 参数 查询作为元组传递给 execute语句(这确保 psycopg2 将负责使它们适应 SQL,同时保护您免受注入(inject)攻击)。 EXCLUDED bit 允许您重复使用这些值,而无需在 data 参数中指定它们两次。

关于postgresql - Psycopg2:如何使用 psycopg2 和 python 插入和更新冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60845779/

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