Django修改模型前批量删库行及迁移JSON错误求助
Django模型操作相关问题解答
用Django ORM删除数据库所有记录的方法
有两种常用方式,可根据数据量和业务需求选择:
- 常规批量删除:会触发模型的
delete()方法及相关信号,适合数据量不大的场景from 你的应用名.models import 目标模型类 目标模型类.objects.all().delete() - 高效快速删除(跳过Django信号/模型方法):仅支持MySQL等部分数据库,会重置自增ID,删除速度更快
from 你的应用名.models import 目标模型类 # 执行原生TRUNCATE语句 目标模型类.objects.raw('TRUNCATE TABLE 你的应用名_目标模型类;')
迁移时MySQL JSON错误的原因分析
错误信息django.db.utils.OperationalError: (3140, 'Invalid JSON text: "Invalid value." at position 0 in value for column '#sql-45_2d01.qbo_class'.')的核心原因是:
MySQL在处理qbo_class字段(迁移时生成的临时表#sql-45_2d01中的对应字段)时,发现数据不符合JSON格式规范。
具体触发场景:
- 你修改了模型,将某个非JSON类型的字段改为
JSONField,但原有数据表中的该字段存储了非法JSON数据(比如普通字符串、未闭合的JSON结构、单引号包裹的字符串等)。 - 迁移过程中,Django尝试将旧数据转换为JSON格式写入临时表,但数据无法被MySQL的JSON解析器识别。
排查建议:
- 用MySQL原生SQL检查原表中的无效数据:
SELECT * FROM 你的数据表名 WHERE NOT JSON_VALID(qbo_class); - 修正所有不符合JSON格式的记录后,重新执行迁移操作。
内容的提问来源于stack exchange,提问作者Ali Shanawer
相关产品推荐
相关产品推荐

