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
相关产品推荐
相关产品推荐

