使用Django向SQLite表高效插入数百条CSV数据的方法是什么?
Django CSV数据批量导入SQLite高效方案
方案1:Django ORM bulk_create 批量插入(最常用、兼容性最好)
这是几百条数据量级下性价比最高的方案,比逐条调用save()快5~10倍,不需要额外工具,还能复用Django模型的字段校验逻辑。
操作步骤:
- 首先确认你的Django模型字段和CSV列一一对应,比如模型为
myapp.models.Product - 读取CSV生成模型实例列表,一次性批量提交:
import csv from myapp.models import Product batch = [] with open("data.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: # 此处可自行添加字段格式转换逻辑,比如日期、数值类型转换 batch.append(Product( name=row["商品名称"], price=float(row["商品价格"]), stock=int(row["库存"]), # 其余字段按实际情况映射 )) # 批量插入,SQLite环境建议batch_size设置在100~500区间 Product.objects.bulk_create(batch, batch_size=200, ignore_conflicts=True)
参数说明:ignore_conflicts=True可跳过唯一键冲突的数据,避免导入中断。
方案2:SQLite原生CSV导入(速度最快)
如果不需要走Django ORM的校验逻辑,直接调用SQLite自带的导入命令,速度比ORM方案还要快数倍,适合数据已经提前校验完成的场景。
操作步骤:
- 先确认Django模型对应的数据库表名,默认规则为
应用名_模型小写名,比如myapp应用下的Product模型对应表名为myapp_product - 命令行执行导入:
# 进入SQLite交互模式,db.sqlite3为你的Django数据库文件路径 sqlite3 db.sqlite3 # 切换为CSV导入模式 .mode csv # 执行导入,注意如果表有自增主键,CSV不要包含主键列,避免冲突 .import ./data.csv myapp_product
方案3:自定义Django管理命令(适合重复导入场景)
如果需要定期执行导入操作,可以把批量插入逻辑封装为Django自定义命令,后续直接调用命令即可执行,不需要重复写导入逻辑。
注意事项
- 导入前建议先备份数据库,避免错误写入导致数据损坏
- CSV如果有特殊字符、空值,提前做清洗处理,避免插入失败
- 几百条数据的量级下方案1完全够用,操作简单不容易出错
内容的提问来源于stack exchange,提问作者Somto
相关产品推荐
相关产品推荐

