squashmigrations 用法(如何查找 'migration_name')
squashmigrations useage (how to find 'migration_name')
我正在使用 Django 1.8。
当 运行 python manage.py squashmigrations myapp
我明白了:
manage.py squashmigrations: error: the following arguments are required: migration_name
如何找到 migration_name?
更新
这实际上是一个微不足道的问题。我也可以看看
\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
我只是猜了多少次我已经 运行 migrate
幸运的是它会在我做任何事情之前提示我。所以现在我只需要继续猜测,直到我看到类似 CommandError: Cannot find a migration matching '0021' from app 'myapp'
.
的东西
查看您的文件app_name/migrations。 migration_name 应该是“0001_initial”等
migration_name是yourapp/migrations/
中文件的序号
python manage.py sqlmigrate asset 0001
ll asset/migrations/
total 12
-rw-r--r--. 1 root root 1326 Feb 9 20:17 0001_initial.py
-rw-r--r--. 1 root root 1405 Feb 9 20:20 0001_initial.pyc
-rw-r--r--. 1 root root 0 Feb 5 06:07 __init__.py
-rw-r--r--. 1 root root 140 Feb 5 06:48 __init__.pyc
asset 是我的应用,0001 是 migration_name
要在脚本中以编程方式查找,您可以使用
./manage.py migrate --list <app_name> | tail -1 | cut -d ' ' -f 3
对于一堆应用程序
APPS="asset common product"
for APP in $APPS
do
# find out the latest migration
MIGRATION_NAME=`./manage.py migrate -l $APP | tail -1 | cut -d ' ' -f 3`
./manage.py squashmigrations $APP $MIGRATION_NAME
done
查找迁移名称的最简单的两个选项是:
- 在您的应用程序目录中查看您的
migrations
文件夹
- 运行
python manage.py showmigrations <app_name>
显示应用程序的所有迁移,以及它们是否已应用。
提示:
您可以在精确迁移的定义中使用唯一前缀。例如,如果您的应用中有以下迁移:
0001_initial
0002_auto_20150809_2248
0003_answer
0004_auto_20150812_0305
而你想压缩到 0004_auto_20150812_0305
你只是 运行
python manage.py showmigrations <app_name> 0004
然而,在某些情况下,您可能有多个具有特定数量的迁移。这可能发生在您合并两个 VCS 分支时,在这些分支中使用相同的编号创建了迁移。幸运的是,Django 通常可以通过 运行ning makemigrations --merge
自动处理这个问题,你最终可能会得到:
0001_initial
0002_auto_20150809_2248
0003_answer
0004_auto_20150812_0305
0006_auto_20150812_0601
0006_cleanup
0007_merge
在这种情况下,你真的应该挤压到合并迁移,但如果你需要专门针对 0006
之一,只需使用足够的名称,以便 Django 可以区分。使用 0006_a
应该足以定位 0006_auto_20150812_0601
。
这也适用于 migrate
命令。
我正在使用 Django 1.8。
当 运行 python manage.py squashmigrations myapp
我明白了:
manage.py squashmigrations: error: the following arguments are required: migration_name
如何找到 migration_name?
更新
这实际上是一个微不足道的问题。我也可以看看
\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
我只是猜了多少次我已经 运行 migrate
幸运的是它会在我做任何事情之前提示我。所以现在我只需要继续猜测,直到我看到类似 CommandError: Cannot find a migration matching '0021' from app 'myapp'
.
查看您的文件app_name/migrations。 migration_name 应该是“0001_initial”等
migration_name是yourapp/migrations/
中文件的序号python manage.py sqlmigrate asset 0001
ll asset/migrations/
total 12
-rw-r--r--. 1 root root 1326 Feb 9 20:17 0001_initial.py
-rw-r--r--. 1 root root 1405 Feb 9 20:20 0001_initial.pyc
-rw-r--r--. 1 root root 0 Feb 5 06:07 __init__.py
-rw-r--r--. 1 root root 140 Feb 5 06:48 __init__.pyc
asset 是我的应用,0001 是 migration_name
要在脚本中以编程方式查找,您可以使用
./manage.py migrate --list <app_name> | tail -1 | cut -d ' ' -f 3
对于一堆应用程序
APPS="asset common product"
for APP in $APPS
do
# find out the latest migration
MIGRATION_NAME=`./manage.py migrate -l $APP | tail -1 | cut -d ' ' -f 3`
./manage.py squashmigrations $APP $MIGRATION_NAME
done
查找迁移名称的最简单的两个选项是:
- 在您的应用程序目录中查看您的
migrations
文件夹 - 运行
python manage.py showmigrations <app_name>
显示应用程序的所有迁移,以及它们是否已应用。
提示: 您可以在精确迁移的定义中使用唯一前缀。例如,如果您的应用中有以下迁移:
0001_initial
0002_auto_20150809_2248
0003_answer
0004_auto_20150812_0305
而你想压缩到 0004_auto_20150812_0305
你只是 运行
python manage.py showmigrations <app_name> 0004
然而,在某些情况下,您可能有多个具有特定数量的迁移。这可能发生在您合并两个 VCS 分支时,在这些分支中使用相同的编号创建了迁移。幸运的是,Django 通常可以通过 运行ning makemigrations --merge
自动处理这个问题,你最终可能会得到:
0001_initial
0002_auto_20150809_2248
0003_answer
0004_auto_20150812_0305
0006_auto_20150812_0601
0006_cleanup
0007_merge
在这种情况下,你真的应该挤压到合并迁移,但如果你需要专门针对 0006
之一,只需使用足够的名称,以便 Django 可以区分。使用 0006_a
应该足以定位 0006_auto_20150812_0601
。
这也适用于 migrate
命令。