8

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

我试图检查 Alembic 和 Flask-Migrate 的文档,但没有找到答案。

4

3 回答 3

6

您可以使用子命令确定您的项目是否为最新迁移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)

希望这可以帮助!

于 2016-12-28T07:15:23.077 回答
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.')

我还通过此检查发布了要点

于 2019-05-10T22:25:08.947 回答
0

这个https://github.com/4Catalyzer/alembic-autogen-check有一个工具

像这样工作

$ > alembic-autogen-check
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.autogenerate.compare] Detected NULL on column 'user.is_superuser'
ERROR: Migrations are out of sync with models. Diff:
[ [ ( 'modify_nullable',
      None,
      'user',
      'is_superuser',
      { 'existing_comment': None,
        'existing_server_default': False,
        'existing_type': BOOLEAN()},
      False,
      True)]]

You may need to run `PYTHONPATH=. alembic revision --autogenerate -m 'Your message'`.
 
于 2021-12-08T11:00:13.123 回答