如何用django-south恢复掉落的桌子?

Cla*_*diu 20 python database django django-syncdb django-south

我想在我的数据库中清除一个表,所以我放弃了表.通常我会manage.py syncdb重新创建它.但是,这里的答案说不再使用syncdb了.那么,我该怎么做呢?

leh*_*ins 39

这是一个相当晚的回应,但对于那些会遇到同样问题的人(就像我做的那样).

通常要删除由南方管理的应用程序的db_tables,您应该使用:

python manage.py migrate appname zero
Run Code Online (Sandbox Code Playgroud)

但是如果你在db中手动丢弃它们让南方知道它

python manage.py migrate appname zero --fake
Run Code Online (Sandbox Code Playgroud)

当然要重新创建表格

python manage.py migrate appname
Run Code Online (Sandbox Code Playgroud)

  • 这仅在您删除_every_ table时有效 (11认同)

Dav*_*idG 27

有同样的问题.不确定这适用于所有情况,但这就是我所做的:

  1. 从INSTALLED_APPS注释掉"south"
  2. 运行manage.py syncdb
  3. 在INSTALLED_APPS中取消注释"south"
  4. 运行manage.py migrate

瞧!

你的旅费可能会改变....


Cla*_*diu 2

嗯,这次交流涵盖了我的问题:

如果您手动修改数据库,South 不会注意到 - 它跟踪数据库版本的唯一方法是 South_migrationhistory 表,因此如果您在背后捣乱,则您有责任修复它。

我最终做的是注释掉我删除的有问题的模型,执行 a schemamigration,创建一个我删除的空无列表(这样 South 有一些东西要删除),migrate然后取消注释该模型,schemamigration然后migrate再次ing。比直接摔桌子更烦人,syncdb但是啊好吧。