django + south:migrate命令不在数据库中创建表

时间:2012-03-27 01:17:20

标签: database django migration data-migration django-south

我有一个strnage问题。 我的django项目有myapp模块/应用程序。我的项目使用south来进行模式迁移。 在localhost上我运行了./manage.py schemamigration myapp --initial,然后我运行了migrate命令。

但是在生产环境中我执行migrate命令时,这不会在数据库中创建相应的表(myapp模型)。

这很奇怪,因为如果我执行migrate --list,myapp必须迁移并且它们都被标记(带*符号)。

所以,我正在考虑删除myapp并从头开始重新创建(使用相应的迁移)。有更好的解决方案吗?

编辑: 我试图删除myapp并从头开始重新创建它。所以我也删除了数据库中的myapp表(在localhost和生产服务器上),毕竟我执行了:

localhost上的

schemamigration myapp --initial命令

localhost上的

migrate myapp命令

生产服务器上的

migrate myapp 0001 --fake

但是South继续不在生产服务器的数据库中创建myapp表。

3 个答案:

答案 0 :(得分:1)

如果您不小心或故意在数据库中删除了某个表并且您正在尝试运行./manage migrate myapp这不会在您的数据库中创建删除的表。 因为南方与您的数据库没有联系。

如果您想重新创建表格。将架构迁移到以前的版本并最新迁移。请相应地使用以下代码

manage.py migrate myapp 0002 --fake
manage.py migrate myapp

注意:002是您之前的迁移版本。

答案 1 :(得分:0)

如果您删除了表格,除非先进行--fake,否则不应该运行manage.py syncdb。如果没有表格,您应该能够运行python manage.py migrate myapp并完成它(或manage.py syncdb)。 --initial创建的第一个迁移在其中创建了表语句。

--fake明确告诉南方不要做任何事情,只是假装它已迁移(执行数据库更改)并将历史表标记为这样。

答案 2 :(得分:0)

我知道它有点晚了,但有同样的问题,我发现问题是我的manage.py指向错误的设置文件,因此错误的数据库。确保您的manage.py指向正确的设置文件,并且正在对正确的数据库进行迁移。如果您使用多个manage.py文件或多个设置文件,则会出现这种情况。