flask-migrate映射数据库
使用 db.create_all() 后期修改或者增加字段的时候,不会自动映射到数据库中,必须删除表,然后重新运行 db.create_all() 才会重新映射
flask-migrate 可以将修改的字段映射到数据库中
老版本的 flask-migrate 需配合 flask-script 使用,由于 flask-script 长久不维护,且没有适配 flask 2.0 以上的版本,所以 flask-migrate 去掉了 flask-script 的支持
官方文档:https://flask-migrate.readthedocs.io/en/latest
安装
$ activate # 进入虚拟环境
$ pip install flask-migrate # 当前版本为 3.1.0
使用
from flask import *
import config
from db import db
from models import *
+ from flask_migrate import Migrate
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
- # db.create_all(app=app)
+ migrate = Migrate(app, db)
@app.route('/')
return render_template('index.html')
if __name__ == '__main__':
app.run()
$ activate
$ flask db init # 默认 flask 启动文件为 app.py,不是的话需要更改环境变量
$ flask db migrate -m "initial migration" # -m 会将内容添加到版本文件名中
$ flask db upgrade
flask db init 会生成 migrations 文件夹,目录结构如下:

排坑
只有在新增或者删减字段时 flask db migrate 才会起作用
更新表字段不起作用,输出 INFO [alembic.env] No changes in schema detected.
经过多方查询,需更改 migrations -> env.py 中的配置项
def run_migrations_online():
# ...
with connectable.connect() as connection:
context.configure(
# ...
+ compare_type=True, # 检查字段类型
+ compare_server_default=True, # 比较默认值
)

浙公网安备 33010602011771号