我有一个strnage问题。
我的django项目有myapp模块/应用程序。我的项目使用south来进行模式迁移。
在localhost上我运行了./manage.py schemamigration myapp --initial
,然后我运行了migrate命令。
但是在生产环境中我执行migrate
命令时,这不会在数据库中创建相应的表(myapp模型)。
这很奇怪,因为如果我执行migrate --list
,myapp必须迁移并且它们都被标记(带*符号)。
所以,我正在考虑删除myapp并从头开始重新创建(使用相应的迁移)。有更好的解决方案吗?
编辑: 我试图删除myapp并从头开始重新创建它。所以我也删除了数据库中的myapp表(在localhost和生产服务器上),毕竟我执行了:
localhost上的 schemamigration myapp --initial
命令
migrate myapp
命令
migrate myapp 0001 --fake
但是South继续不在生产服务器的数据库中创建myapp表。
答案 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文件或多个设置文件,则会出现这种情况。