有没有办法(从代码中)检查 django 迁移是否已执行?

问题描述 投票:0回答:2

与:

./manage.py showmigrations

可以看到已执行和待处理迁移的列表。我想在运行时获取此列表(或迁移数量),以便我可以通过监视工具公开它以查看是否有任何迁移失败。

我检查了内部结构,但目前找不到任何方法来公开这一点。

python django postgresql migration prometheus
2个回答
2
投票

您可以使用

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]
.

这可能足以让您开始。


0
投票

检查

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
的连接,为了使示例尽可能简单,现在省略了该连接。

© www.soinside.com 2019 - 2024. All rights reserved.