Skip to content

四、ORM模型迁移

一、安装flask-migrate

bash
pip install flask-migrate

二、引入flask-migrate

python
from flask_migrate import Migrate

app = Flask(__name__)

# xxxxxx

# 创建实例对象
db = SQLAlchemy(app)

migrate=Migrate(app,db)

、映射

初始化操作只需要执行一次,其他的操作每次都要执行

1、初始化数据库迁移环境

flask db init 命令用于创建一个名为 migrations 的目录,该目录用于存储数据库迁移脚本和其他相关文件

python
flask db init

如果报错:

PS E:\code\flask\Flask\草稿\flaskProject1> flask db init
Usage: flask db init [OPTIONS]

Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.

打开CMD终端

bash
set FLASK_APP=app.py  应用程序入口文件
set FLASK_ENV=development
flask db init

命令执行完成后,会在项目的根路径下生成一个migrations文件夹,在这个文件夹下有以下文件或文件夹

  1. versions:文件夹,用于存放后面生成的迁移脚本文件。由于目前没有生成过任何迁移脚本,因此是一个空的文件夹。
  2. alembic.ini: alembic 的配置文件。
  3. env.py:配合Flask 项目进行迁移的 Python 文件。
  4. script.py.mako:生成迁移脚本的模板文件。

2、识别ORM模型的改变,生成迁移脚本

bash
flask db migrate (-m "备注信息")

结果(此时User表和Artice表已被删了)

bash
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'user'
INFO  [alembic.autogenerate.compare] Detected added table 'article'
Generating E:\code\flask\Flask\草稿\flaskProject1\migrations\versions\da78b3fcab49_.py ... done

参数-m后面跟的是备注信息,通过添加备注信息,可方便以后查看当前迁移脚本做了哪些事情。当然,备注信息不是必需的,如果不想添加,则把参数以及后面的内容都删除即可。

3、运行迁移脚本,同步到数据库

bash
flask db upgrade