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

DRF迁移报错sqlite3.OperationalError:new__budgets_budget列数过多求助

解决SQLite迁移时"too many columns"错误的方案

核心原因

SQLite单表默认最大列数为2000,Django执行迁移时会创建临时表(比如new__budgets_budget)处理结构变更,一旦临时表列数超过这个限制就会触发sqlite3.OperationalError: too many columns错误。你拆分表后仍报错,大概率是旧迁移残留或迁移逻辑未正确拆分导致的。

具体解决办法

  • 清理残留的旧迁移文件
    检查项目中budgets应用的migrations目录,除__init__.py外,删除所有涉及原Budget表新增列、合并表结构的旧迁移文件(先做好备份)。之后执行:

    python manage.py makemigrations
    python manage.py migrate
    

    若数据库已存在拆分后的表结构,用python manage.py migrate --fake标记迁移完成,避免重复操作。

  • 拆分迁移操作,分步执行
    不要一次性生成所有拆分表的迁移,分步骤完成:

    1. 先只定义Budget1模型,执行makemigrations和migrate完成该表创建;
    2. 再添加Budget2模型,重复迁移步骤;
    3. 最后添加Budget3模型完成迁移。
      每次迁移仅处理单表创建,不会触发临时表列数超限问题。
  • 手动干预迁移过程
    若自动生成的迁移文件仍有问题,可直接用SQLite命令行创建拆分后的三张表,再执行:

    python manage.py migrate --fake budgets <迁移编号>
    

    让Django迁移系统标记这些表已创建,之后就能正常通过模型操作数据。

额外建议

SQLite本身不是为超宽表设计的,即使拆分后单表1000列也接近它的上限。如果后续还有字段扩容需求,建议更换为PostgreSQL或MySQL这类更适配复杂表结构的数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:22:54