【问题标题】:Django & South: Adding new field but DatabaseError occurs "table already exists"Django & South:添加新字段但 DatabaseError 发生“表已存在”
【发布时间】:2012-06-01 22:26:32
【问题描述】:

在尝试向预先存在的模型/表添加新字段时,我收到一个 DatabaseError 并显示“表已存在”。我在这个之前已经运行过迁移,所以我有点困惑为什么添加一个新字段会弹出这个错误。

执行的命令:

python manage.py schemamigration app --auto
python manage.py migrate app

以前的类似这样的 SO 问题都是通过伪造迁移来回答的。

python manage.py migrate app --fake
python manage.py migrate app

由此产生的问题是没有创建列。所以当你运行服务器时,你会看到一个 DatabaseError 'no such column'。

就我的模型而言,我只是添加了一个 CharField。

提前感谢您的帮助-

【问题讨论】:

  • 我注释掉了该字段,运行了架构迁移,然后迁移。取消注释该字段,运行架构迁移,然后迁移并且它工作。不知道我做错了什么:/

标签: python django django-south


【解决方案1】:

我注释掉了该字段,运行架构迁移,然后迁移。取消注释该字段,运行架构迁移,然后迁移并且它工作。不知道我做错了什么。

【讨论】:

    【解决方案2】:

    当您在迁移方面做了一些事情并且没有让南方知道这件事时,就会发生这种情况。

    如果您查看数据库中的 south_* 表,您会发现 south 在数据库中保留了有关 db 迁移的日志。常见的方法是伪造迁移。 南方有一个fake 参数。

    您可以在此处了解全部内容: http://south.readthedocs.org/en/latest/commands.html#options

    【讨论】:

      【解决方案3】:

      您需要先执行schemamigration app --initialschemamigration app --initial没有您的新字段,然后migrate app --fake 0001(或它返回的任何迁移编号)将南数据库设置为该状态(已创建表)。

      添加您的新字段,然后运行schemamigration myapp --auto然后迁移。

      【讨论】:

      • 这是我一直在寻找的答案。一段时间以来一直在为此挠头!
      • 使用 MySQL 仍然 asspain :/
      猜你喜欢
      • 2012-11-18
      • 2011-03-06
      • 1970-01-01
      • 2013-04-04
      • 2012-03-08
      • 1970-01-01
      • 2011-08-29
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多