2024-05-19 03:38:19 发布
网友
在Django中,是否有一种简单的方法可以检查是否所有数据库迁移都已运行?我找到了manage.py migrate --list,这给了我想要的信息,但是格式不是很好的机器可读性。
manage.py migrate --list
对于上下文:我有一个脚本,在数据库迁移之前不应该开始运行。出于各种原因,从运行迁移的进程发送信号将是很困难的。所以我想让我的脚本定期检查数据库,看看是否所有的迁移都已运行。
试试看
python manage.py migrate --list | grep "\[ \]\|^[a-z]" | grep "[ ]" -B 1
回报
<app_1> [ ] 0001_initial [ ] 0002_auto_01201244 [ ] 0003_auto_12334333 <app_2> [ ] 0031_auto_12344544 [ ] 0032_auto_45456767 [ ] 0033_auto_23346566 <app_3> [ ] 0008_auto_3446677
更新:
如果您已经更新了Django版本>;=1.11,请使用下面的命令
1.11
python manage.py showmigrations | grep '\[ \]\|^[a-z]' | grep '[ ]' -B 1
外壳
到目前为止我找到的唯一简单的解决办法就是
./manage.py showmigrations | grep '\[ \]'
它将输出一个空字符串,以防所有迁移都已应用。
但是,它与输出格式密切相关。
Python
我检查了^{}命令的源代码,看起来这应该可以做到:
from django.db.migrations.executor import MigrationExecutor from django.db import connections, DEFAULT_DB_ALIAS def is_database_synchronized(database): connection = connections[database] connection.prepare_database() executor = MigrationExecutor(connection) targets = executor.loader.graph.leaf_nodes() return not executor.migration_plan(targets) # Usage example. if is_database_synchronized(DEFAULT_DB_ALIAS): # All migrations have been applied. pass else: # Unapplied migrations found. pass
1.10发行说明:
The new makemigrations --check option makes the command exit with a non-zero status when model changes without migrations are detected.
makemigrations --check
试试看
回报
更新:
如果您已经更新了Django版本>;=
1.11
,请使用下面的命令外壳
到目前为止我找到的唯一简单的解决办法就是
它将输出一个空字符串,以防所有迁移都已应用。
但是,它与输出格式密切相关。
Python
我检查了^{} 命令的源代码,看起来这应该可以做到:
1.10发行说明:
相关问题 更多 >
编程相关推荐