检查待处理的Django迁移 [英] Check for pending Django migrations

查看:62
本文介绍了检查待处理的Django迁移的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Django中,有没有一种简单的方法来检查是否已运行所有数据库迁移?我找到了 manage.py migration --list ,它为我提供了我想要的信息,但是格式不是机器可读的。

In Django, is there an easy way to check whether all database migrations have been run? I've found manage.py migrate --list, which gives me the information I want, but the format isn't very machine readable.

对于上下文:我有一个脚本,该脚本在迁移数据库之前不应该开始运行。由于各种原因,从运行迁移的流程中发送信号会很棘手。因此,我想让我的脚本定期检查数据库,以查看是否所有迁移都已运行。

For context: I have a script that shouldn't start running until the database has been migrated. For various reasons, it would be tricky to send a signal from the process that's running the migrations. So I'd like to have my script periodically check the database to see if all the migrations have run.

推荐答案

Shell

到目前为止,我发现的唯一简单的解决方案就是运行

The only simple solution I've found so far is running

./manage.py showmigrations | grep '\[ \]'

如果所有迁移都已完成,它将输出一个空字符串

which will output an empty string in case all migrations have been applied.

但是,它与输出格式紧密相关。

However, it is closely tied to the output format.

Python

我检查了 migrate 命令,看来应该可以解决问题:

I checked the source code of migrate command and it seems like this should do the trick:

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

这篇关于检查待处理的Django迁移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆