You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在psycopg2中参数化UPDATE语句的多组元组及额外参数

解决方案

要同时实现UPDATE语句中多组元组VALUES子句的参数化,以及额外查询参数(如other_id)的参数化,可结合psycopg2.extras.execute_values和额外参数绑定来实现,无需使用f-string:

步骤1:导入所需模块

from psycopg2 import extras

步骤2:编写参数化SQL语句

SQL中用%s作为VALUES子句的占位符,额外参数使用命名占位符(或位置占位符):

UPDATE your_table as t
SET val = x.val_to
FROM (VALUES %s) as x (val_from, val_to)
WHERE t.val = x.val_from
AND t.other_id = %(other_id)s

步骤3:执行参数化查询

通过execute_values处理VALUES子句的多组元组,同时通过vars参数传入额外参数:

# 待更新的多组(val_from, val_to)元组
update_vals = [(1, 20), (3, 44)]
# 额外查询参数
params = {'other_id': 3843}

# 执行查询
extras.execute_values(
    cur,
    """
    UPDATE your_table as t
    SET val = x.val_to
    FROM (VALUES %s) as x (val_from, val_to)
    WHERE t.val = x.val_from
    AND t.other_id = %(other_id)s
    """,
    update_vals,
    vars=params
)

原理说明

  • execute_values专门用于批量参数化VALUES子句,会自动将传入的元组列表转换为安全的参数化格式,避免SQL注入
  • vars参数用于绑定SQL语句中除VALUES占位符外的其他参数,支持命名占位符或位置占位符的形式

内容的提问来源于stack exchange,提问作者baxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:58:31