22

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

4

5 回答 5

41

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

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

python manage.py migrate appname zero

但是,如果您将它们手动放入数据库中,请让南方知道

python manage.py migrate appname zero --fake

当然要重新创建表格

python manage.py migrate appname
于 2012-11-23T16:12:39.360 回答
27

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

  1. 从 INSTALLED_APPS 中注释掉“南”
  2. 运行 manage.py syncdb
  3. 在 INSTALLED_APPS 中取消注释“南”
  4. 运行 manage.py 迁移

瞧!

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

于 2011-08-26T01:46:52.677 回答
2

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

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

我最终做的是注释掉我删除的模型,做 a schemamigration,为我删除的模型创建一个空的无列表(所以 South 有一些东西要删除)migrate,然后取消注释模型,schemamigration然后migrate再次ing。比只是放下桌子更烦人,syncdb但是啊。

于 2011-03-16T16:15:48.583 回答
1

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

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

告诉南方一切都在它应该在的地方:python manage.py migrate appname --fake

这假设自您创建上次迁移以来,您的任何模型都没有发生任何变化。

于 2013-06-28T23:01:26.407 回答
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 migrateappname并且 South 应该将表重新添加回您的数据库中......再次使用列等,但显然没有数据。:)
于 2013-11-23T03:06:51.163 回答