【问题标题】:Django 1054 - Unknown Column in field listDjango 1054 - 字段列表中的未知列
【发布时间】:2014-12-10 14:05:23
【问题描述】:

我有一个 Django 项目,我做了以下工作:

  1. 添加了一个包含一些列的表格
  2. 在数据库中插入一些记录
  3. 添加了一个我没有意识到我需要的新列
  4. 进行了更新以填充该列

当我执行migrate 时,一切正常。在表上创建了新的 db 列并填充了值。

但是,当我尝试运行测试时,我现在在上面的第 2 步中崩溃了。当我插入时,我相信它期望该字段存在,即使当时尚未创建它。

我该怎么办?

编辑:更多信息

我首先创建了一个类,A 类并进行了迁移以创建表。然后我对我的数据库运行了这个。然后我写了一个手动迁移来填充一些我知道会在那里的数据。我对数据库运行了这个。后来我意识到我需要在模型上添加一个额外的字段。我添加了该字段并进行了迁移并针对数据库运行了它。一切正常,我确认新列在数据库中。

现在,我去运行我的测试。它试图创建测试数据库并在尝试运行我编写的填充数据脚本时说“1054 - 未知列[我添加到现有表中的新列]”。很可能是在看表,注意到模型中存在第三个字段,但数据库中还没有,但我不知道如何做得更好。

【问题讨论】:

  • 你的型号是什么?您是否对模型进行了更改?
  • 请解释一下您所说的“当我插入时,我相信它期望该字段存在,即使当时尚未创建它”?单元测试独立于迁移...
  • 您最初是如何创建表的?您是使用迁移还是进入 SQL 并手动创建它?
  • 我会尝试在编辑中解决您的问题。

标签: python mysql django database data-migration


【解决方案1】:

除非新列定义了默认值,否则插入语句将期望向该列添加数据。您能否将数据加载移动到第二次迁移之后。 (我会发表评论,但还没有足够的声誉。)

【讨论】:

    【解决方案2】:

    我相信这是因为迁移脚本被乱序调用,因为我在设置它们时遇到了问题。现在一切正常。

    【讨论】:

      【解决方案3】:

      这发生在我身上,因为我伪造了一个迁移 (m1),创建了另一个 (m2),然后在我伪造我的初始迁移之前尝试迁移 m2 (米1)。

      所以就我而言,我必须先migrate --fake <app name> m1,然后再migrate <app name> m2

      【讨论】:

        【解决方案4】:

        为了解决这个问题,我遇到了同样的问题,只需删除数据库中的所有表,然后运行:

        python manage.py makemigrations

        和:

        python manage.py 迁移

        【讨论】:

          猜你喜欢
          • 2020-01-23
          • 1970-01-01
          • 2018-03-12
          • 2013-12-10
          • 2011-04-16
          • 2016-04-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多