我们正在使用 SQLAlchemy 和 Alembic(以及 Flask-SQLAlchemy 和 Flask-Migrate)。如何检查是否有待处理的迁移?
我试图检查 Alembic 和 Flask-Migrate 的文档,但没有找到答案。
我们正在使用 SQLAlchemy 和 Alembic(以及 Flask-SQLAlchemy 和 Flask-Migrate)。如何检查是否有待处理的迁移?
我试图检查 Alembic 和 Flask-Migrate 的文档,但没有找到答案。
您可以使用子命令确定您的项目是否为最新迁移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)
希望这可以帮助!
以下是您如何以编程方式执行此操作:
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.')
我还通过此检查发布了要点。
这个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'`.