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

时间:2011-03-16 16:01:03

标签: python database django django-south django-syncdb

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

5 个答案:

答案 0 :(得分:39)

对于那些遇到同样问题的人来说,这是一个相当晚的回应。(或者像我一样)。

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

python manage.py migrate appname zero

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

python manage.py migrate appname zero --fake

当然要重新创建表格

python manage.py migrate appname

答案 1 :(得分:27)

有同样的问题。不确定这在所有情况下都有效,但这就是我所做的:

  1. 从INSTALLED_APPS
  2. 注释掉“south”
  3. 运行manage.py syncdb
  4. 在INSTALLED_APPS
  5. 中取消注释“south”
  6. 运行manage.py migrate
  7. 瞧!

    您的里程可能会有所不同....

答案 2 :(得分:2)

this exchange涵盖了我的问题:

  

如果您手动修改数据库,South将不会注意到 - 它唯一的方法   跟踪数据库的版本是什么   south_migrationhistory表,所以如果你背后摆动,那就是   你有责任解决它。

我最终做的是评论我丢弃的模型,执行schemamigration,创建一个空的无柱表,我放弃的那个(所以南方有东西可以放弃),{{ 1}}然后取消注释模型migrateschemamigration。比放弃桌子和migrate更麻烦但是好啊。

答案 3 :(得分:1)

确保应用所有迁移: python manage.py migrate

告诉Django创建表格中的表格:python manage.py syncdb

告诉南方,一切都应该是:python manage.py migrate appname --fake

这假设您创建上次迁移后任何模型中没有任何变化。

答案 4 :(得分:0)

我知道这个问题已经过时了,但我刚刚遇到这个问题并且认为我会发布我的解决方案,以防这对任何人都有帮助。

  1. 进入数据库所在的models.py文件夹。
  2. models.py文件中删除整个班级。
  3. 运行./manage.py schemamigration appname --auto(这将创建另一个迁移,其中South将识别删除此表)。您可能需要在数据库中重新创建一个空白表,以便South看到它。
  4. 运行migration,表格应从数据库中删除。
  5. 将表类重新粘贴回models.py文件中的位置。
  6. 运行./manage.py schemamigration appname --auto。南应该拿起桌子并允许你迁移
  7. 运行./manage.py migrate appname,South应该将表重新添加到您的数据库...再次使用列,但显然没有数据。 :)