All Articles

Flask-Migrate变更数据库忽略指定表

处理思路是使用alembic库中的comparators 增加一个context的二次处理方法达到过滤目的。 Flask-Migrate==2.1.1测试通过

from flask_script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
from models import db

def migrate_skip(migrate, skip_list):
    @migrate.configure
    def configure_alembic(config):
        from alembic.autogenerate.compare import comparators

        @comparators.dispatch_for("schema")
        def _autogen_for_tables(autogen_context, upgrade_ops, schemas):
            # 处理跳过的表
            upgrade_ops.ops = [op for op in upgrade_ops.ops if op.table_name not in skip_list]

        return config

app = create_app()
manager = Manager(app)
migrate = Migrate(app, db)

# 数据库比对升级跳过指定的表
skip_list = [
    "some_table",
]
migrate_skip(migrate, skip_list)

if __name__ == '__main__':
    manager.add_command('db', MigrateCommand)
    manager.run()
Published 6 Apr 2018

Python, JavaScript 全栈之路.
Windpro Zhao on Weibo