在Django-South中,Pesky“Table'my_table'已经存在”

时间:2011-03-11 21:52:18

标签: django django-south

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

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

我得到了很多追溯,结尾于:

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

经过大量的谷歌搜索后,我发现并尝试了这个:

./manage.py migrate myapp --fake

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

有什么建议吗?

3 个答案:

答案 0 :(得分:7)

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

我的问题是我使用--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

成功!

可能还有其他因素会导致此错误,但这是我的错误!

答案 1 :(得分:4)

它是现有应用吗?

在这种情况下,除了假位之外,你还需要转换它。

有关转换现有应用的好文档here

虽然如果你不知道它们已经在哪里,它们是非常棘手的(;

在向已安装的应用添加南方之后进行转换:

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

答案 2 :(得分:0)

如果其中一个案例发生了这个问题:

1)你做了#34; schemamigration app_name --initial"一个是" - auto" 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