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

如何将20GB大CSV分块读取后写入PostgreSQL数据库?

分块写入大型CSV到PostgreSQL的实现方案

首先修正你代码里的小问题:导入pandas时要写成import pandas as pd,否则pd.read_csv会报错;循环语法需要加上for关键字,正确写法是for chunk in ...。

接下来直接上可运行的实现代码——pd.read_csv指定chunksize后返回的本身就是生成器迭代器,完全符合你的需求,不需要额外编写生成器逻辑,直接循环写入即可:

import pandas as pd
from sqlalchemy import create_engine

# 创建SQLAlchemy引擎,替换成你的PostgreSQL连接信息
engine = create_engine('postgresql://username:password@host:port/database_name')

# 分块读取CSV并写入数据库
chunk_size = 10000  # 可根据内存情况调整,比如调到1万或10万
for chunk in pd.read_csv("test.csv", chunksize=chunk_size):
    chunk.to_sql(
        name='your_table_name',  # 替换为目标数据库表名
        con=engine,
        if_exists='append',  # 追加模式,避免覆盖已有数据
        index=False,  # 不写入DataFrame的索引列
        method='multi'  # 可选:批量提交多行,提升写入速度
    )
    print(f"已完成{len(chunk)}条数据写入")

实用优化建议:

  • 调整chunk_size:内存充足时调大该值,减少数据库交互次数,提升整体效率
  • 指定数据类型:若CSV包含日期、特殊字符串等类型,提前用dtype参数指定(如dtype={'date_col': 'datetime64[ns]'}),避免类型推断错误
  • 临时关闭约束:若目标表已建好,写入前可临时关闭PostgreSQL的外键、唯一性约束(需对应权限),写完再恢复,能大幅提速
  • 进阶批量写入:追求极致速度的话,可结合psycopg2的copy_from方法,将chunk转为CSV字符串后批量导入,适合有一定基础后尝试

内容的提问来源于stack exchange,提问作者Will-Iam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:06:47