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

Django带外键关联的模型如何实现高效批量创建数据

Django Image 模型高效批量插入方案

优化核心思路

  • 消除冗余查询:你的Item模型使用自定义的item_id作为主键,原始数据中已经持有该值,构造Image实例时可直接指定外键IDitem_id,无需提前查询Item对象
  • 批量插入替代单条插入:和Item的插入逻辑一致,使用bulk_create批量写入Image数据,大幅减少数据库IO次数

实现代码

from itertools import islice
from django.db import transaction

# 可根据实际场景调整批次大小,SQLite环境建议设置为1000~5000
BATCH_SIZE = 2000

# 开启事务进一步提升写入性能
with transaction.atomic():
    # 构造Image实例生成器,不占用额外内存
    image_iter = (
        Image(
            item_id=item['id'],
            image_url=image['urls']['big']
        )
        for item in items
        for image in item['images']
    )
    # 分批插入
    while True:
        batch = list(islice(image_iter, BATCH_SIZE))
        if not batch:
            break
        Image.objects.bulk_create(batch, BATCH_SIZE)

性能提升说明

原有实现的性能开销主要来自两部分:每遍历一个Item就执行1次SELECT查询,每插入一张图片执行1次INSERT查询,数据量大时SQL执行次数会达到十万甚至百万级。优化后仅需执行个位数到几十次INSERT查询,无任何SELECT开销,SQLite环境下插入速度可提升几十到上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:36:05