问题描述
我有一个 flask-appbuilder
(FAB) 项目,我想使用 flask-migrate
来处理数据库迁移。但是 FAB 事先自行创建了数据库,因此 flask-migrate
无法计算迁移
我知道 this example 和 this 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的交叉发布
解决方法
这为我解决了问题。
$ flask db stamp head # Set current revision in the database to be head
$ flask db migrate
$ flask db upgrade