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

Django加载大JSON文件入库数据缺失问题求助

数据插入数量不一致的原因分析

尝试加载本地目录中大小为250MB、包含1060000条数据的JSON文件,通过for循环将数据保存至数据库,但每次执行完成后,数据库中保存的数据总量与JSON数据长度不一致,有时仅存入1052000条,有时为1056700条。

实现代码

json_data = open('dblama/4. inventaris_ruang.json')
data = json.load(json_data)

data_size = len(data)
print('length data:{}'.format(data_size))

for di in data:
   ivt = Inventaris()
   ivt.tahun = di['thn']
   ivt.nomor = di['nmr']
   ivt.barcode = di['rid']
   ivt.save()

模型定义

class Inventaris(models.Model):
    tahun = models.CharField(max_length=4, null=True, blank=True)
    nomor = models.CharField(max_length=50, null=True, blank=True)  
    barcode = models.CharField(max_length=255, null=True, blank=True)    

可能的原因

1. 字段长度校验失败

模型中tahun、nomor、barcode都有明确的长度限制。如果JSON里存在thn长度超过4、nmr超过50或rid超过255的数据,Django执行save()时会触发校验错误,但因为你没加异常捕获,程序会直接跳过这条数据继续循环,导致插入总数减少。

2. 未处理数据库层面的异常

循环过程中没有捕获数据库异常,一旦遇到连接超时、锁冲突、事务失败等问题,当前数据插入会失败,程序不会重试也不会报错,直接进入下一次循环,造成数据丢失。这类问题的触发具有随机性,所以每次丢失的数据量不一致。

3. JSON数据存在隐性问题

虽然len(data)显示总数正确,但JSON里可能存在格式不规范的条目,比如某些字段值类型不匹配(比如tahun是数字而非字符串)、字段缺失,或者隐含的重复唯一键(如果数据库后期添加了唯一约束但未同步到模型),这些数据无法被正确插入,且不会触发程序崩溃。

4. 单条插入的效率问题

百万级数据用循环单条save()的方式效率极低,长时间的数据库连接可能出现连接中断、超时等隐性错误,部分插入请求无法成功完成,最终导致插入数量不足。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:08:13