我们正在使用SQLAlchemy和Alembic(以及Flask-SQLAlchemy和Flask-Migrate)。如何检查是否存在待定迁移?
我尝试检查了Alembic和Flask-Migrate的文档但未能找到答案。
答案 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。