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

ari*_*kfr 6 python sqlalchemy flask-sqlalchemy alembic flask-migrate

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

我尝试查看Alembic和Flask-Migrate的文档,但找不到答案。

mac*_*iek 6

您可以通过以下方式以编程方式执行此操作:

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.')
Run Code Online (Sandbox Code Playgroud)

我还发布了带有此检查的要点

  • 这个评论非常有帮助。对于来到这里的其他人来说,使用项目的 alembic 文件夹的路径可能会有所帮助,而不是依赖 .ini 文件。`script.ScriptDirectory('/path/to/alembic/project')` (2认同)

Mig*_*uel 5

您可以使用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)

希望这可以帮助!