我想清除数据库中的一个表,所以我删除了该表。通常我会manage.py syncdb
重新创建它。但是,这里的答案说不再使用syncdb
。那么,我该怎么做呢?
5 回答
这是一个相当晚的回应,但对于会遇到同样问题的人(就像我一样)。
通常要删除由 south 管理的应用程序的 db_tables,您应该使用:
python manage.py migrate appname zero
但是,如果您将它们手动放入数据库中,请让南方知道
python manage.py migrate appname zero --fake
当然要重新创建表格
python manage.py migrate appname
有同样的问题。不确定这在所有情况下都有效,但这是我所做的:
- 从 INSTALLED_APPS 中注释掉“南”
- 运行 manage.py syncdb
- 在 INSTALLED_APPS 中取消注释“南”
- 运行 manage.py 迁移
瞧!
你的旅费可能会改变....
嗯,这次交流涵盖了我的问题:
如果您手动修改数据库,South 不会注意到 - 它跟踪数据库版本的唯一方法是 south_migrationhistory 表,因此如果您在背后摆弄它,则修复它是您的责任。
我最终做的是注释掉我删除的模型,做 a schemamigration
,为我删除的模型创建一个空的无列表(所以 South 有一些东西要删除)migrate
,然后取消注释模型,schemamigration
然后migrate
再次ing。比只是放下桌子更烦人,syncdb
但是啊。
确保应用了所有迁移:
python manage.py migrate
告诉 Django 创建模型中的表:python manage.py syncdb
告诉南方一切都在它应该在的地方:python manage.py migrate appname --fake
这假设自您创建上次迁移以来,您的任何模型都没有发生任何变化。
我知道这个问题很老,但我刚刚遇到了这个问题,并认为我会发布我的解决方案以防万一这对任何人都有帮助。
- 进入
models.py
数据库所在的文件夹。 models.py
从文件中删除整个类。- 运行 ./manage.py schemamigration
appname
--auto (这将创建另一个迁移,South
将识别删除此表)。您可能需要在数据库中重新创建一个空白表,以便South
查看它。 - 运行
migration
并且该表应该从您的数据库中删除。 - 将表格类重新粘贴回
models.py
文件中的位置。 - 运行 ./manage.py schemamigration
appname
--auto。南方应该拿起桌子并允许您迁移 - 运行 ./manage.py migrate
appname
并且 South 应该将表重新添加回您的数据库中......再次使用列等,但显然没有数据。:)