6

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

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

而且我得到了很多回溯,这些回溯以:

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

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

./manage.py migrate myapp --fake

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

有什么建议么?

4

3 回答 3

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

成功!

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

于 2011-09-01T18:29:48.720 回答
4

它是现有的应用程序吗?

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

这里有关于转换现有应用程序的好文档。

尽管如果您不知道它们已经在哪里,则很难找到它们( ;

对于转换,将南添加到您安装的应用程序后:

./manage.py syncdb
./manage.py convert_to_south myapp
./manage.py migrate myapp 0001 --fake
于 2011-03-13T01:47:55.097 回答
0

如果以下情况之一,此问题实际上会发生:

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

了解更多信息。关于南方,您可以在此处查看其文档。

于 2014-07-06T22:36:42.827 回答