与:
./manage.py showmigrations
可以看到已执行和待处理迁移的列表。我想在运行时获取此列表(或迁移数量),以便我可以通过监视工具公开它以查看是否有任何迁移失败。
我检查了内部结构,但目前找不到任何方法来公开这一点。
您可以使用
MigrationRecorder
:
from django.db.migrations.recorder import MigrationRecorder
all_migrations = MigrationRecorder.Migration.objects.all()
Migration
是标准的Django模型,例如:
applied_migrations = [migration for migration in all_migrations if migration.applied]
.
这可能足以让您开始。
检查
Migration
查询集(由 MigrationRecorder
公开,因为 Migration
是动态创建的 Model
)并筛选 applied
属性不会显示哪些迁移未应用或失败,因为记录器仅将应用的迁移存储在数据库中。
最好向负责生成迁移计划(和应用程序)的
MigrationExecutor
询问这个问题:
from django.db.migrations.executor import MigrationExecutor
def all_migrations_applied(app_label=None):
executor = MigrationExecutor()
if app_label:
targets = [
node for node in executor.loader.graph.leaf_nodes() if node[0] == app_label
]
else:
targets = executor.loader.graph.leaf_nodes()
return len(executor.migration_plan(targets)) == 0
如果您想过滤特定应用程序,请指定
app_label
参数。您可以(或者可能应该)也提供与MigrationExecutor
的连接,为了使示例尽可能简单,现在省略了该连接。