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

如何修正Python批量插入PostgreSQL时的INSERT语句语法错误?

如何修正Python批量插入PostgreSQL时的INSERT语句语法错误?

嗨,这个问题我之前也踩过坑!你遇到的语法错误,根源在于psycopg2(Python连接PostgreSQL的常用驱动)不支持?作为参数占位符,它用的是%s来做参数占位——哪怕是数字类型的参数也得用这个格式。

你原来的代码里用了?,PostgreSQL根本识别不了这种占位符,所以才会报语法错误。把占位符换成%s就能解决问题啦,修正后的代码如下:

values = [(id, 2940, ts, False) for id in identities_to_deactivate]

# 把占位符从?替换为psycopg2支持的%s
sql = "INSERT INTO sval (id, column2, column3, column4) VALUES (%s, %s, %s, %s)"
cursor.executemany(sql, values)
conn.commit()

另外再给你提个小建议:如果你的identities_to_deactivate列表特别长,用executemany虽然没问题,但也可以考虑一次性插入多条数据的写法(把多个VALUES组合并在一起),性能会更优,示例代码如下:

# 生成对应数量的占位符组
placeholders = ", ".join(["(%s, %s, %s, %s)"] * len(values))
# 拼接成批量插入的SQL语句
sql = f"INSERT INTO sval (id, column2, column3, column4) VALUES {placeholders}"
# 把二维列表展开成一维,传入execute方法
cursor.execute(sql, [item for sublist in values for item in sublist])
conn.commit()

不过如果数据量不是特别大,用executemany就足够方便啦。

备注:内容来源于stack exchange,提问作者killerbee88

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:13:02