【问题标题】:Pesky "Table 'my_table' already exists" in Django-SouthDjango-South 中讨厌的“表‘my_table’已经存在”
【发布时间】:2011-03-11 21:52:17
【问题描述】:

在 Django-South 中: 我改变了我已经成功地为 myapp 运行了初始迁移,但是由于某种原因,在我对我的模型进行了更改并转到

./manage.py schemamigration myapp --auto
./manage.py migrate myapp

我得到了很多回溯,以:

(1050, "Table 'my_table' already exists")

经过多次谷歌搜索,我发现并尝试了这个:

./manage.py migrate myapp --fake

然后我继续迁移它,但无济于事;同样的错误。

有什么建议吗?

【问题讨论】:

  • 你试过丢表吗?
  • 是的。放下桌子,它似乎可以工作,但是当我对模型进行另一次更改时,我得到了同样的错误。那么我每次都必须放下桌子吗?如果是这样,南方的意义何在?我可以自己做。
  • 安装南后你运行manage.py syncdb了吗? South 需要自己的表来保存迁移,请确保您的数据库中有一个南迁移表。正确设置后,South 很棒,绝对值得学习

标签: django django-south


【解决方案1】:

我刚遇到同样的错误,通过搜索找到了这个问题。

我的问题是我使用 --initial 标志创建的第二次迁移,即

$ ./manage.py startapp foo
$ ./manage.py schemamigration --initial foo
$ ./manage.py migrate foo

...对 foo 进行一些更改...

$ ./manage.py schemamigration --initial foo

(哎呀!)

$ ./manage.py migrate foo

...我收到错误,迁移失败,因为在第二次迁移中,South 正在尝试创建一个已经创建的表。

解决方案

在我的迁移文件夹中:

$ ls foo/migrations
0001_initial.py   0002_initial.py

删除第二个迁移并使用正确的--auto 标志重新导出第二个迁移:

$ rm foo/migrations/0002_initial.py
$ ./manage.py schemamigration --auto foo
$ ./manage.py migrate foo

成功!

可能还有其他原因导致此错误,但那是我的错!

【讨论】:

  • 对于任何这样做的人,请记住备份您的架构以防万一。此外,如果您多次运行schemamigration --initial,则删除除00010002 之外的所有模式。
【解决方案2】:

它是现有的应用程序吗?

在这种情况下,除了假位之外,您还需要对其进行转换。

有很好的文档 here 关于转换现有应用程序。

虽然如果你不知道它们在哪里的话很难找到它们(;

为了转换,在您安装的应用程序中添加南之后:

./manage.py syncdb
./manage.py convert_to_south myapp
./manage.py migrate myapp 0001 --fake

【讨论】:

  • 这不是一个现有的应用程序,所以我为什么有点困惑。这从一开始就有南方。
【解决方案3】:

如果出现以下情况,就会出现这个问题:

1) 你在“--auto”之后创建了“schemamigration app_name --initial” 2) 您中断了您上次进行的迁移。

要解决此类问题,请应用以下内容:

1) 将您上次的架构迁移标记为假的。

python manage.py schemamigration app_name --fake

注意:确保模型的架构与数据库中表的架构相同。

2) 再次应用迁移

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

注意:有时您可能会手动使用以下语法添加已添加的特定字段。

python manage.py schemamigration app_name --add-field My_model.added_field

了解更多信息。关于南方,你可以查看它的文档here

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 1970-01-01
    • 2011-03-31
    • 2016-06-12
    • 1970-01-01
    • 2010-12-01
    • 2010-11-19
    • 2018-04-18
    • 2015-01-07
    相关资源
    最近更新 更多