之前ORM模型定义好后,是通过db.create_all将ORM模型映射到数据库中的,这种方式是有局限性的,它只能识别到新增了模型后映射到数据库中的对于模型中字段的修改,对弈类型的修改,无法识别到,因此在实际开发中,都不会使用db.create_all来做ORM模型迁移,而是借助一个第三方插件Flask-Migrate来实现,Flask-Migrate是基于alembic实现的,alembic是专门用来给SQLAlchemy的ORM模型做迁移的,要使用Flask-Migrate,首先需要通过pip命令安装
pip3 install flask-migrare
alembic会随着flask-migrate安装而自动安装,在完成flask-migrate安装后,接下来就是如何配置了
1、创建迁移对象
首先创建对象的代码如下
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
、、、、、、、
# 创建一个有Flask-SQLAlchemy提供的SQLAlchemy类的对象db,在创建这个类时,要传入当前的app
db = SQLAlchemy(app)
migrate = Migrate(app,db)
首先从flask_migrate包中导入Migrate,然后实例化这个对类,在实例化是传入app和db对象,并赋值给migrate变量,后续在执行迁移命令时,Flask-Migrate会自动读取app.py中的migrate变量,所以变量名必须为migrate
2、初始化迁移环境
在创建完迁移对象后,需要初始化迁移环境,方法是在当前项目的根目录下Terminal执行如下命令
flask db init
或
python3 -m flask db init
我在运行上面命令的时候提示zsh: command not found: flask,使用pip3 install Flask-Migrate命令后再输入flask db init试试,如果还是不行,使用python3 -m flask db init试试,我使用这个命令是成功了的,此命令仅执行一次即可,命令执行完成后,会在项目的根路径下生成一个migrations文件夹,在这个文件夹下有以下文件或文件夹
- version:文件夹,用于存放后面生成的迁移脚本文件,由于目前没有生成过任何迁移脚本,因此是一个空的文件夹
- alembic.ini:alembic的配置文件
- evn.py:配合Flask项目进行迁移的Python文件
- script.py.mako:生成迁移脚本的模版文件 后续只要不断生成迁移脚本和映射脚本即可,无需重复初始化
3、生成迁移脚本
在初始化完成迁移环境的前提下,无论是新增了ORM模型,或者是ORM模型中有任何字段信息发生改变,并且要将这些改变同步到数据库中,都要做一件事情就是将当前的修改生成一个迁移脚本,生成迁移脚本的命令如下
flask db migrate -m "备注信息"
或
python3 -m flask db migrate -m "备注信息"
以上命令中参数-m后面跟的是备注信息,通过添加备注信息,可方便以后查看当前迁移脚本做了哪些事情,当然,备注信息不是必必需的,可以不写,但是建议添加备注信息
4、执行迁移脚本
迁移脚本只是写好了表变更的内容,但是并没有更新数据库,因此还需要执行迁移脚本将这些改变真正映射到数据库中,执行迁移脚本的命令如下
flask db upgrade
以上命令会自动从version文件夹中寻找最新的迁移脚本文件,然后执行迁移脚本文件中的upgrade函数,在这步工作完成后,模型的修改就能真正映射到数据库中了