Django 1.7迁移 – 我如何清除所有的迁移,从头开始?
所以我现在正在快速迭代django应用程序,并且不断调整models.py。 在一两天的编程和testing过程中,我生成了几十个迁移文件。 有时候,我真的把这个模式分开了,完全重新做。 这导致迁移过程抱怨很多关于默认和空值等等。 如果可能的话,我只是想抓取所有的迁移工作,现在重新开始迁移,我终于知道自己在做什么了。 到目前为止,我的做法是:
- 删除
__init__.py
之外的所有迁移文件夹。 - 放入我的PostgreSQL控制台,然后执行:
DELETE FROM south_migrationhistory WHERE app_name='my_app';
- 而在PostgreSQL控制台中,删除所有与my_app关联的表。
- 重新运行
./manage.py makemigrations my_app
– 这会在我的migrations文件夹中生成一个0001_initial.py
文件。 - 运行
./manage migrate my_app
– 我希望这个命令重新构build我的所有表,但是却说:“没有迁移到应用”。
是什么赋予了?
另外, south_migrationhistory
数据库performance在仍然在使用中,我已经倾倒南部,并切换到Django 1.7?
谢谢。
所以我在我的问题中概述的分步计划确实有效,但是不要从south_migrationhistory
数据库表中删除行,而必须从south_migrationhistory
数据库表中删除行。
该命令是: DELETE FROM django_migrations WHERE app='my_app'
完成此操作后,您将可以从头开始重新运行迁移。
我只是想把所有的步骤变成一个命令格式:
注:下面的命令是相当具有破坏性的,这是一个手段, start from scratch
OP start from scratch
问。
从mikeb
发表评论后,我想补充mikeb
:
预先检查您将删除的文件
find . -path *migrations* -name "*.py" -not -path "*__init__*"
然后,将步骤1
的命令调整为适用于您的开发环境的命令。
- 从所有的应用程序中删除所有的迁移:
find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path
- 重新创build整个数据库:
sudo -u postgres bash -c "psql -c \"DROP DATABASE rootedin;\"" sudo -u postgres bash -c "psql -c \"CREATE DATABASE rootedin;\"" sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE rootedin to vagrant;\"" # vagrant is my current user
- 让你的数据库最新:
python3 manage.py makemigrations python3 manage.py migrate