psycopg2:如何使用psycopg2和python在冲突中进行插入和更新?

阿比·辛格

我正在使用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。

离子t

引用psycopg2的文档

警告从不,从不,从不使用Python字符串串联(+)或字符串参数插值(%)将变量传递给SQL查询字符串。甚至没有枪口。

现在,对于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。)

EXCLUDED位允许您重用这些值,而无需在data参数中指定两次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章