woo*_*uck 3 django postgresql django-migrations
我正在使用 Django 1.8。
运行时python manage.py squashmigrations myapp我得到这个:
manage.py squashmigrations: error: the following arguments are required: migration_name
Run Code Online (Sandbox Code Playgroud)
我如何找到migration_name?
查找迁移名称的最简单的两个选项是:
migrations在您的应用程序目录中查看您的文件夹python manage.py showmigrations <app_name>以显示应用程序的所有迁移,以及它们是否被应用。提示: 您可以在精确迁移的定义中使用唯一前缀。例如,如果您的应用中有以下迁移:
0001_initial
0002_auto_20150809_2248
0003_answer
0004_auto_20150812_0305
Run Code Online (Sandbox Code Playgroud)
你想压扁0004_auto_20150812_0305你就跑
python manage.py showmigrations <app_name> 0004
Run Code Online (Sandbox Code Playgroud)
但是,在某些情况下,您可能会有多个具有特定数量的迁移。如果您合并两个 VCS 分支,其中迁移创建的编号相同,则可能会发生这种情况。幸运的是,Django 通常可以通过运行自动处理这个问题makemigrations --merge,你可能会得到:
0001_initial
0002_auto_20150809_2248
0003_answer
0004_auto_20150812_0305
0006_auto_20150812_0601
0006_cleanup
0007_merge
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您应该真正压缩到合并迁移,但是如果您需要0006专门针对其中之一,只需使用足够的名称,以便 Django 可以区分。使用0006_a应该足以定位0006_auto_20150812_0601. 这也适用于migrate命令。
woo*_*uck -1
更新
这其实是一个微不足道的问题。我也可以只查看
\myproject\myapp\migrations\保存所有迁移文件的文件夹(或使用 psql 查看数据库)。
这是我现在的解决方法:
(venv) mydir> python manage.py squashmigrations myapp 0006
Will squash the following migrations:
- 0001_initial
- 0002_auto_20150809_2248
- 0003_answer
- 0004_auto_20150812_0305
- 0005_auto_20150812_0601
- 0006_auto_20150812_1903
Do you wish to proceed? [yN] N
Run Code Online (Sandbox Code Playgroud)
我只是猜测我跑了多少次migrate,幸运的是它在做任何事情之前都会提示我。所以现在我只需要继续猜测,直到看到类似的东西CommandError: Cannot find a migration matching '0021' from app 'myapp'。