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

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格式规范。

具体触发场景:

  1. 你修改了模型,将某个非JSON类型的字段改为JSONField,但原有数据表中的该字段存储了非法JSON数据(比如普通字符串、未闭合的JSON结构、单引号包裹的字符串等)。
  2. 迁移过程中,Django尝试将旧数据转换为JSON格式写入临时表,但数据无法被MySQL的JSON解析器识别。

排查建议:

  • 用MySQL原生SQL检查原表中的无效数据:
    SELECT * FROM 你的数据表名 WHERE NOT JSON_VALID(qbo_class);
    
  • 修正所有不符合JSON格式的记录后,重新执行迁移操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:01:44