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

使用psycopg2的execute_values()批量插入时报字符串格式化错误如何解决

报错原因及解决方案

你出现该报错是对psycopg2.extras.execute_values()的用法存在三处核心错误,对应修复方式如下:

错误点梳理

  • 调用execute_values()时传入的第三个参数不符合要求:该参数需要接收所有待插入行组成的可迭代对象(即你存储了全量数据的data列表本身),你现在通过循环遍历data每次传入单个行d,和方法要求的入参结构不匹配。
  • SQL模板写法错误:execute_values()会自动处理批量值的拼接逻辑,SQL语句只需写为INSERT INTO 表名(字段列表) VALUES %s即可,你写的VALUES (%s),存在多余的括号和逗号,导致语法解析失败。
  • 冗余的循环逻辑完全抵消了批量插入的性能优势:逐行调用execute_values()再加逐行commit,性能甚至不如普通的逐行插入,完全没有用到该方法的批量优化能力。

修正后可运行的代码

import psycopg2.extras

# 原有爬取逻辑不变,所有数据统一追加到data列表中
data = []
# 这里是你循环爬取的逻辑,每爬取一条就往data里追加一个元组
results = (court, case_title, issue_date, link, details)
data.append(results)

# 全量数据爬取完成后,统一执行一次批量插入
sql = '''INSERT INTO dist_crt_opins (court, case_title, issue_date, link, details) VALUES %s'''
psycopg2.extras.execute_values(cursor, sql, data, template='(%s, %s, %s, %s, %s)', page_size=1000)
conn.commit()

额外优化建议

你之前逐行插入可以成功,说明单条数据的字段数量、类型和表结构是匹配的,按上述修改后即可正常写入。针对10万条量级的数据,你可以把page_size调整到2000-5000,写入效率会更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:09:04