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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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类并传入app与db对象



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

3. 创建迁移环境

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


flask db init

0cc51963322e489ab48a0010b6659b01.png


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


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


4.生成迁移脚本

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


flask db migrate


5c81f1db743e4fdc933a090f1fcd659f.png

这条命令可以简单理解为在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)。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
108 0
|
3月前
|
存储 监控 关系型数据库
rds迁移前准备资源评估与配置
rds迁移前准备资源评估与配置
37 5
|
3月前
|
存储 容灾 安全
在阿里云RDS(Relational Database Service)迁移前准备目标区域选择
在阿里云RDS(Relational Database Service)迁移前准备目标区域选择
29 3
|
15天前
|
SQL 关系型数据库 数据库
Flask模型关系与复杂查询技巧
【4月更文挑战第16天】本文探讨了Flask中使用SQLAlchemy进行模型关系管理与复杂查询的方法。SQLAlchemy作为ORM工具,简化了数据库操作。模型关系包括一对一、一对多和多对多,通过定义类间关系实现。文章还介绍了join、子查询、聚合函数、分组与排序等查询技巧,并提出了优化查询性能的建议,如创建索引、避免N+1查询、使用分页及预加载关联数据。理解并运用这些技巧能提升Flask应用的开发效率和性能。
|
2月前
|
关系型数据库 MySQL 数据库
使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
【2月更文挑战第29天】使用阿里云的数据传输服务DTS(Data Transmission Service)进行MySQL 5.6到MySQL 8.0的迁移
225 2
|
2月前
|
SQL 关系型数据库 MySQL
OBCP实践 - 迁移 MySQL 数据到 OceanBase 集群
OBCP实践 - 迁移MySQL数据到OceanBase集群,这是一个涉及到将现有MySQL数据库的数据和表结构迁移到OceanBase分布式数据库集群的实际操作过程。OceanBase是一款高度兼容MySQL协议的分布式数据库产品,支持在线平滑迁移,以便企业用户可以从传统的MySQL数据库平滑迁移到OceanBase,以实现更高的可用性、扩展性和性能。
42 0
|
3月前
|
关系型数据库 MySQL 数据库
如何正确的把Mysql迁移至其他机器上运行
如何正确的把Mysql迁移至其他机器上运行
|
3月前
|
关系型数据库 测试技术 数据库
rds迁移前准备数据一致性保障
rds迁移前准备数据一致性保障
103 5
|
3月前
|
存储 容灾 关系型数据库
rds迁移后验证
rds迁移后验证
24 1
|
3月前
|
SQL 监控 关系型数据库
rds迁移过程监控
rds迁移过程监控
22 1