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

PostgreSQL如何将INSERT语句的插入值转换为参数传递?

错误原因

cur.execute()方法仅支持接收2个入参:

  • 第一个参数:预编译的SQL语句字符串
  • 第二个参数:所有SQL占位符对应的值组成的单个一维序列/元组

你当前的写法把两行的值拆成了2个独立元组传入,相当于给execute方法传入了3个参数(SQL语句+第一个行元组+第二个行元组),因此触发参数数量不匹配的TypeError。另外注意不要给参数化的SQL语句加f前缀,f字符串拼接SQL会有SQL注入风险,直接写普通字符串即可,参数会由数据库驱动自动安全注入。

正确实现方式

方式1:直接使用execute(适合插入行数较少的场景)

把所有占位符对应的值平铺到同一个元组里传入即可:

cur.execute("""INSERT INTO patients_patient (patient_id, patient_name) VALUES
                      (%s,%s),(%s,%s)""", (1, 'Jane', 2, 'John'))

方式2:使用executemany批量插入(适合插入行数多的场景,性能更优)

不需要手动拼接多个VALUES占位符,直接传入所有行数据组成的列表即可:

# 所有待插入的行数据
insert_data = [(1, 'Jane'), (2, 'John')]
cur.executemany("INSERT INTO patients_patient (patient_id, patient_name) VALUES (%s, %s)", insert_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:04