将烧瓶迁移与烧瓶应用程序一起使用

时间:2021-06-17 12:56:25

标签: python flask flask-migrate flask-appbuilder

我有一个 flask-appbuilder (FAB) 项目,我想使用 flask-migrate 来处理数据库迁移。但是 FAB 事先自行创建了数据库,因此 flask-migrate 无法计算迁移

我知道 this examplethis issue on FAB's repository,但是我无法使用它们来解决问题。

这是一个显示问题的最小应用程序。

# app.py
from flask import Flask
from flask_appbuilder import AppBuilder, SQLA
from flask_migrate import Migrate
import os
from flask_appbuilder import Model
from sqlalchemy import Column, Integer


class Config():
    basedir = os.path.abspath(os.path.dirname(__file__))
    SQLALCHEMY_DATABASE_URI = \
        'sqlite:///' + os.path.join(basedir, 'app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False


db = SQLA()
migrate = Migrate()
appbuilder = AppBuilder()


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)
    db.init_app(app)
    migrate.init_app(app, db)

    with app.app_context():
        appbuilder.init_app(app, db.session)
        appbuilder.post_init()

    return app


class MyTable(Model):
    __tablename__ = "my_table"

    id = Column(Integer, primary_key=True)
    mycol = Column(Integer)


if __name__ == "__main__":
    app = create_app()
    app.run()

可以在虚拟环境中使用以下 requirements.txt 进行测试:

flask-appbuilder==3.1.0
SQLAlchemy==1.3.24
flask-migrate

通过发行

export FLASK_APP=app.py
flask db init
flask db migrate

输出为 INFO [alembic.env] No changes in schema detected,所以没有迁移。但是数据库已经创建。

注意:来自my issue on FAB's repo的交叉发布

1 个答案:

答案 0 :(得分:0)

这为我解决了问题。

$ flask db stamp head # Set current revision in the database to be head
$ flask db migrate
$ flask db upgrade