如何在使用SQLAlchemy / Alembic时检查是否存在挂起的迁移?

时间:2016-12-27 10:24:38

标签: python sqlalchemy flask-sqlalchemy alembic flask-migrate

我们正在使用SQLAlchemy和Alembic(以及Flask-SQLAlchemy和Flask-Migrate)。如何检查是否存在待定迁移?

我尝试检查了Alembic和Flask-Migrate的文档但未能找到答案。

2 个答案:

答案 0 :(得分:3)

您可以使用current子命令判断您的项目是否为最新迁移:

最近一次迁移时的输出示例:

(venv) $ python app.py db current f4b4aa1dedfd (head)

关键是版本号后面出现的(head)。这告诉你这是最近的迁移。

以下是我添加新迁移后但在升级数据库之前情况发生的变化:

(venv) $ python app.py db current f4b4aa1dedfd

在我运行db upgrade后,我得到了:

(venv) $ python app.py db current f3cd9734f9a3 (head)

希望这有帮助!

答案 1 :(得分:0)

以下是您可以通过编程方式进行的方法:

from alembic import config
from alembic import script
from alembic.runtime import migration
import sqlalchemy

import exceptions


engine = sqlalchemy.create_engine(DATABASE_URL)
alembic_cfg = config.Config('alembic.ini')
script_ = script.ScriptDirectory.from_config(alembic_cfg)
with engine.begin() as conn:
    context = migration.MigrationContext.configure(conn)
    if context.get_current_revision() != script_.get_current_head():
        raise exceptions.DatabaseIsNotUpToDate('Upgrade the database.')

我还发布了gist with this check