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

如何将大规模Python列表批量存入PostgreSQL表及executemany报错排查

错误原因分析
  • PostgreSQL标识符大小写规则问题:PostgreSQL默认会将所有未用双引号包裹的SQL标识符(表名、列名等)自动转换为小写。你的SQL语句中写的表名是public.stockScrapper_currentday,包含大写字母,PostgreSQL解析时会自动转为全小写的public.stockscrapper_currentday,如果建表时你用双引号保留了大写表名,就会出现找不到对应关系的报错。
  • 表名拼写不匹配:你贴出的实际业务表名为currentDay,但SQL语句中写的表名是stockScrapper_currentday,二者名称完全不一致,这是报错的最核心原因。
  • 其他潜在原因:未在public schema下创建对应表、连接的数据库实例错误、当前数据库用户没有该schema/表的访问权限,也可能触发同类报错。
修复方法
  1. 先对齐表名和列名与实际表结构:你贴出的currentDay表列名为Stock Code、Stock Price、Low、High、Open、Close,如果要保留列名中的大写和空格,需要用双引号包裹标识符,修改后的插入语句如下:
cursor = connection.cursor()
# 注意字段顺序要和你列表的元素顺序一一对应:股票代码、当前价格、成交量、当日最低、当日最高、开盘价,和表列顺序对齐
insert_sql = '''
INSERT INTO public."currentDay" ("Stock Code", "Stock Price", Low, High, Open, Close)
VALUES (%s, %s, %s, %s, %s, %s)
'''
cursor.executemany(insert_sql, stockDetailsDict)
connection.commit()
  1. 如果你的实际表确实名为stockScrapper_currentday,只需给大小写混合的表名加上双引号即可:
insert_sql = '''
INSERT INTO public."stockScrapper_currentday" (ticker, stockCurrentPrice, stockVolume, stockDayLow, stockDayHigh, stockOpen)
VALUES (%s, %s, %s, %s, %s, %s)
'''
  1. 额外性能优化:如果后续需要导入更大规模的数据,可以改用PostgreSQL原生的COPY FROM语法,导入速度是executemany的2-10倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 16:36:03