flask中生成迁移脚本并将orm模型映射至MySQL

背景:

在开发时,以删除表再重建的方式更新数据库简单直接,但明显的缺陷是会丢掉数据库中的所有数据。在生产环境下,你绝对不会想让数据库里的数据都被删除掉,这时你需要使用数据库迁移工具来完成这个工作。SQLAlchemy的开发者MichaelBayer写了一个数据库迁移工具-Alembic来帮助我们实现数据库的迁移,数据库迁移工具可以在不破坏数据的情况下更新数据库表的结构。蒸馏器(Alembic)是炼金术士最重要的工具,要学习SQL炼金术( SQLAlchemy),我们当然要掌握蒸馏器的使用。

1.安装flask-migrate

扩展Flask-Migrate集成了Alembic,提供了一些flask命令来简化迁移工作,我们将使用它来迁移数据库。Flask-Migrate及其依赖(主要是Alembic)可以使用Pipenv安装:

pip install flask-migrate 

2.在程序中实例化Migrate类

实例化Migrate类时,除了传入程序实例app,还需要传入实例化Flask-SQLAlchemy提供的SQLAlchemy类创建的db对象作为第二个参数。

因为SQLAlchemy在app中与orm模型类中都要使用,如果在两个不同py文件中都使用了SQLAlchemy会导致重复引用而产生异常,那么我们就需要新建一个py文件来将SQLAlchemy作为公共对象供app和orm模型类来使用。

1.新建一个ext.py,并创建sqlalchemy对象

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

2.在app中导入SQLAlchemy对象,初始化Migrate类并传入appdb对象

from flask_migrate import Migrate 
from ext import db

app = Flask( name ) 
# ....增加一下配置信息,这里就不写了
# 实例化Migrate类
migrate= Migrate(app, db) 

3. 创建迁移环境

在开始迁移数据之前,需要先使用下面的命令创建一个迁移环境:

flask db init 

 

 

附注:Flask-Migrate提供了一个命令集,使用db作为命名集名称,它提供的命令都以flask db开头。你可以在命令行中输入flask --help查看所有可用的命令和说明。

迁移环境只需要创建一次。这会在你的项目根目录下创建一个migrations文件夹,其中包含了自动生成的配置文件和迁移版本文件夹。

4.生成迁移脚本

使用migrate子命令可以自动生成迁移脚本:

flask db migrate

 这条命令可以简单理解为在flask里对数据库(db)进行迁移(migrate)。

从上面的代码可以看出,迁移脚本主要包含了两个函数:upgrade()函数用来将改动应用到数据库,函数中包含了向表中添加create_time字段的命令;而downgrade()函数用来撤销改动,包含了删除create_time字段的命令。

3.更新数据库

生成了迁移脚本后,使用upgrade子命令即可更新数据库:

# 上面只是生成了迁移文件,这里才是执行迁移动作
flask db upgrade
....
INFO  [sqlalchemy.engine.Engine] COMMIT

如果还没有创建数据库和表,这个命令会自动创建;如果已经创建,则会在不损坏数据的前提下执行更新。

提示: 如果你想回滚迁移,那么可以使用downgrade命令(降级),它会撤销最后一次迁移数据库中的改动,这在开发时非常有用。比如,当你执行upgrade命令后发现某些地方出错了,这时就可以执行flask db downgrade命令进行回滚,删除对应的迁移脚本,重新生成迁移脚本后再进行更新(upgrade)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值