Django中如何批量插入含固定cost_id的数据到SQLite数据库?
Django批量插入多组关联数据实现方案
嗨,这个需求用Django内置的bulk_create()方法就能完美解决,这是Django里批量插入数据最高效的方式之一,我给你详细说下实现步骤:
1. 先确认你的模型定义
首先假设你的模型(比如叫PackingCost)是这样的(如果字段类型和实际不符,你可以调整对应类型):
from django.db import models class PackingCost(models.Model): packing_id = models.CharField(max_length=10) multiplier = models.CharField(max_length=10) cost_id = models.IntegerField() class Meta: # 可根据需求自定义表名或索引 db_table = 'packing_cost'
2. 生成批量插入的实例列表
利用Python的zip()函数把你的两个数组一一配对,同时给每条数据指定cost_id=1,生成模型实例的列表:
# 你的原始数据 packing_ids = ['1', '2', '3', '4'] multipliers = ['11', '21', '31', '41'] target_cost_id = 1 # 生成要插入的对象列表 bulk_objects = [ PackingCost( packing_id=p_id, multiplier=multi, cost_id=target_cost_id ) for p_id, multi in zip(packing_ids, multipliers) ]
3. 执行批量插入
调用模型的bulk_create()方法完成一次性插入:
# 执行批量插入,只会发送一条SQL语句到数据库 PackingCost.objects.bulk_create(bulk_objects)
一些实用小贴士
- 效率优势:
bulk_create()只会生成一条INSERT语句,相比循环调用save()(每条数据都发一次SQL),在数据量越大时效率提升越明显 - 数据一致性:要确保
packing_ids和multipliers两个数组的长度一致,否则zip()会以较短的数组长度为准,导致部分数据丢失 - 特殊字段处理:如果你的模型包含
auto_now_add、ForeignKey这类字段,bulk_create()也能正确处理这些字段的默认值或关联关系
内容的提问来源于stack exchange,提问作者Yosha
相关产品推荐
相关产品推荐

