如何在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
相关产品推荐
相关产品推荐

