python flask使用flask_migrate管理数据库迁移

  • 🌈所属专栏:【Flask
  • 作者主页:  Mr.Zwq
  • ✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询!

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩🥰😍

目录

简介

安装

主要命令

1.初始化

2.迁移

3.升级

4.降级

代码实现

config.py配置文件

exts.py文件

models.py文件 

 app.py文件

使用flask_migrate过程

首次使用

后续使用

总结


 

简介

        Flask-Migrate是Flask应用中的一个扩展子模块,它基于Alembic进行了封装,并集成到Flask中,主要用于在Flask应用中轻松管理数据库迁移。以下是Flask-Migrate的主要特点和功能:

  1. 数据库迁移管理
    • 支持多种数据库。
    • 提供一个简单的命令行工具,用于创建和管理数据库迁移。
  2. 数据库模型定义
    • 提供一个简单的方式来定义数据库模型,使在定义数据库迁移时更加容易。
  3. 数据库迁移脚本生成
    • 可以自动生成数据库迁移脚本,并支持手动编辑和修改。
  4. 数据库版本控制
    • 能够自动检测数据库的版本,并确保进行正确的迁移。
  5. 数据库备份和还原
    • 提供一个简单的方式来备份和还原数据库。
  6. 程序结构
    • 主要包含Flask-Migrate的初始化和配置、数据库的版本号管理、数据库迁移的管理等功能。
    • flask_migrate.MigrateCommand:用于注册Flask-Migrate命令,包括数据库初始化、数据库迁移等命令。
    • flask_migrate.Migrate:迁移引擎,主要实现数据库模型与数据库表的映射、迁移脚本的生成和执行等功能。
    • flask_migrate.utils:包含一些常用的工具函数,如生成哈希、获取当前时间等。
    • migrations:存放迁移脚本的目录。
    • versions:存放迁移版本号的目录。
  7. 数据结构
    • 在管理数据库迁移的过程中,Flask-Migrate使用两个主要数据结构:
      • 数据库版本号(Database Version):表示当前数据库的版本号。在创建数据库时,版本号为0,每接受一次迁移,版本号将会递增。
      • 迁移脚本(Migration Script):包含数据库结构的更改内容。使用SQLAlchemy生成,通过将当前的数据库模型和数据库版本号进行比较,生成一个差异脚本,将这份脚本应用于目标数据库,从而完成数据库的迁移。每次迁移会生成一个新的迁移脚本。
  8. 使用流程
    • 安装Flask-Migrate:pip install flask-migrate
    • 初始化:在应用中配置Flask-Migrate,并创建必要的目录结构。
    • 迁移操作:通过命令行工具执行数据库迁移操作,如初始化、迁移、升级等。

Flask-Migrate通过提供这些功能,使Flask应用能够更方便、更安全地管理数据库迁移,从而保持数据模型与数据库结构的一致性。


安装

pip install flask-migrate

主要命令

1.初始化

flask db init

2.迁移

flask db migrate

3.升级

flask db upgrade

4.降级

flask db downgrade

代码实现

config.py配置文件

class Config():# 数据库配置信息host = '127.0.0.1'  # 主机port = 3306         # 端口user = 'root'       # MySQL账户pwd = '123456'      # MySQL密码database = 'test' # 使用的数据库名称# SQLALCHEMY_DATABASE_URI = 'sqlite:///XXX.db'  # sqlite数据库的配置(数据库名称:XXX.db)SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{user}:{pwd}@{host}:{port}/{database}?charset=utf8mb4"   # MySQL数据库SQLALCHEMY_ECHO = False  # 查询时是否显示原始SQL语句,为False不显示SQLALCHEMY_TRACK_MODIFICATIONS = False  # 跟踪数据库的修改,会增加性能消耗,不建议开启

exts.py文件

# 扩展放在独立文件供其它地方进行引用,可有效防止循环导包问题
from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()

 关于 flask_sqlalchemy 可查看文章:python flask配置数据库并进行orm操作 flask_sqlalchemy-CSDN博客

models.py文件 

from exts import db
from datetime import datetime# 测试用户表
class User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(20), nullable=False)email = db.Column(db.String(50), unique=True, nullable=False)password = db.Column(db.String(50), nullable=False)create_time = db.Column(db.DateTime, default=datetime.now)

 app.py文件

from flask import Flask
from config import Config
from exts import db
from models import User
from flask_migrate import Migrateapp = Flask(__name__)# 读取参数配置
app.config.from_object(Config)
# 创建db对象
db.init_app(app)# 创建migrate对象并绑定app,db
migrate = Migrate(app, db)@app.route('/')
def index():return 'hello world'if __name__ == '__main__':app.run(debug=True)

使用flask_migrate过程

首次使用

1.进入app.py所在的项目目录下,打开终端

第一次使用时需先进行初始化命令:flask db init

完成后,将会在本目录下自动生成migrations文件夹:

33461e55b04044ae9f512dea6868df22.png

2.接下来进行迁移操作:flask db migrate

ebb757ce8fe548d5a7b2cd62b25b23c8.png

 3.再进行升级操作:flask db upgrade

至此,数据表user已经创建成功。

d8cabf7bd4a44fc9b7b5a98c56996d9b.png

查看user表:

55c81651466f4efcb1863038d26cb130.png

 与models文件相对应。

后续使用

每次修改models.py文件后,先进行迁移再进行升级操作即可,数据表即会被对应修改。

即先:flask db migrate,再:flask db upgrade

想要回退数据库的修改操作使用:flask db downgrade 进行降级操作即可


总结

感谢观看,原创不易,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹🌹🌹

1cec9cb8438a4d5496f3fd21f2cb659a.jpeg

👍🏻也欢迎你,关注我。👍🏻

如有疑问,可在评论区留言哦~

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章了解常用排序算法

排序 文章目录 排序直接(插入)排序InsertSort思想实现方法: 希尔排序ShellSort(可过OJ)思想预排序gap的作用整体代码 选择排序SelectSort思想完整代码 堆排序HeapSort(可过OJ)思想大根堆向下调整 完整代码 冒泡排序BubbleSort快速排序(快排&a…

Unity URP 仿原神角色渲染过程记录

想学一下NPR渲染,话不多说,先搞一只芙再说,边做边学 一、资源整理 终于是把东西全都集齐了 1、纹理设置 首先要把将Diffuse和Lightmap的压缩改成"无"或"高质量"。 法线贴图的纹理类型改成"法线贴图"。 除颜…

HarmonyOS 角落里的知识 —— 状态管理

一、前言 在探索 HarmonyOS 的过程中,我们发现了许多有趣且实用的功能和特性。有些总是在不经意间或者触类旁通的找到。或者是某些开发痛点。其中,状态管理是ArkUI开发非常核心的一个东西,我们进行了大量的使用和测试遇到了许多奇奇怪怪的问…

Android平台下VR头显如何低延迟播放4K以上超高分辨率RTSP|RTMP流

技术背景 VR头显需要更高的分辨率以提供更清晰的视觉体验、满足沉浸感的要求、适应透镜放大效应以及适应更广泛的可视角度,超高分辨率的优势如下: 提供更清晰的视觉体验:VR头显的分辨率直接决定了用户所看到的图像的清晰度。更高的分辨率意…

001.VMware Workstation Pro虚拟平台安装

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

《数字图像处理-OpenCV/Python》第16章:图像的特征描述

《数字图像处理-OpenCV/Python》第16章:图像的特征描述 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第16章:图像的特征描述 特征通常是针对图像中的目标或…

快排(霍尔排序实现+前后指针实现)(递归+非递归)

前言 快排是很重要的排序,也是一种比较难以理解的排序,这里我们会用递归的方式和非递归的方式来解决,递归来解决是比较简单的,非递归来解决是有点难度的 快排也称之为霍尔排序,因为发明者是霍尔,本来是命名…

基于Spring Boot+VUE旧物置换网站

1前台首页功能模块 旧物置换网站,在系统首页可以查看首页、旧物信息、网站公告、个人中心、后台管理等内容,如图1所示。 图1系统功能界面图 用户注册,在用户注册页面通过填写用户名、密码、姓名、性别、头像、手机、邮箱等内容进行用户注册&…

FlinkCDC介绍及使用

CDC简介 什么是CDC? cdc是Change Data Capture(变更数据获取)的简称。核心思想是,监测并捕获数据库的 变动(包括数据或数据表的插入,更新以及删除等),将这些变更按发生的顺序完整记录下来,写入到消息中间件以供其它服…

IPv4的报头详解

1.ipv4的报头: 注意:ipv4的报头长度共有20个字节,数据包通过ipv4协议传输后,会进行封装和解封装: 封装:tcp/ip五层参考模型 应用层网络层传输层数据链路层物理层 网络层:tcp/udp 传输层&#…

【odoo】如何开启开发者模式,开启有什么作用?

概要 在 Odoo 中,开发者模式(Developer Mode)是一种专门为开发和调试提供的模式。启用开发者模式可以让开发人员访问到更多的功能和信息,从而更方便地进行模块开发、调试和测试。 启用方式(主要两种) 1.设…

「iOS」UI——无限轮播图实现与UIPageControl运用

「OC」UI 文章目录 「OC」UI无限轮播图的实现以及UIPageControl的实际运用明确要求简单滚动视图的实现UIPageControl的实现设置NSTimer实现自动移动补充实现 进行无限滚动视图的修改思路实现 完整代码展示 无限轮播图的实现以及UIPageControl的实际运用 明确要求 我们要实现一…

四、C#类型转换

在C#中,类型转换是将一个数据类型的值转换为另一个数据类型的过程。 C#中的类型转换可以分为两种:隐式类型转换和显式类型转换(也称为强制类型转换)。 隐式类型转换 隐式转换是不需要编写代码来指定的转换,编译器会…

SSM旅游系统

摘要 旅游业正处于快速发展阶段,旅游系统的建设已经成为了旅游业发展的重要核心问题。在这样的背景下,SSM框架正逐步发展为一种主要的架构。但目前青海省旅游业信息化的发展仍面临诸多问题,包括系统功能不完善、用户体验不佳、数据管理不规范…

c语言中的字符函数

1.字符分类函数 c语言中有一系列函数是专门做字符分类的&#xff0c;也就是一个字符属于什么类型的字符。这些函数的使用需要包含一个头文件是ctype.h 可能你看这些感觉很懵&#xff0c;我以islower举例 #include<ctype.h> int main() {int retislower(A);printf("…

Apache Doris 之 Docker 部署篇

前言 在现代数据驱动的商业环境中&#xff0c;实时数据分析和高并发查询能力是企业成功的关键因素之一。传统的数据仓库和分析工具在面对大规模数据处理和实时分析需求时&#xff0c;往往力不从心。Apache Doris 作为一个现代的 MPP 数据库管理系统&#xff0c;凭借其强大的查…

uni微信小程序使用lottie

在uni插件市场找到 lottie-uni https://ext.dcloud.net.cn/plugin?id1044按照文档要求安装 HBuilderX 引入 下载或导入示例获取插件 import lottie from /common/lottie-miniprogram.jsindex.vue <template><uni-popupref"popup"type"center"ba…

俄罗斯ozon爆款推荐丨ozon学生受众产品

在俄罗斯电商平台OZON上&#xff0c;学生受众是一个庞大且活跃的群体。为了满足他们的需求&#xff0c;OZON平台上涌现出了一系列受学生欢迎的爆款产品。以下是一些针对学生受众的OZON爆款推荐&#xff1a; OZON选品工具&#xff1a;D。DDqbt。COM/74rD Top1 UNO纸牌游戏 俄语…

【OpenGL学习】OpenGL不同版本渲染管线汇总

文章目录 一、《OpenGL编程指南》第6版/第7版的渲染管线二、《OpenGL编程指南》第8版/第9版的渲染管线 一、《OpenGL编程指南》第6版/第7版的渲染管线 图1. OpenGL 2.1、OpenGL 3.0、OpenGL 3.1 等支持的渲染管线 二、《OpenGL编程指南》第8版/第9版的渲染管线 图2. OpenGL …

windows 下安装Nuclei 详细教程

一、软件介绍 Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发&#xff0c;具有很强的可配置性、可扩展性和易用性。 二、下载安装 官网&#xff1a;https://docs.projectdiscovery.io/tools/nuclei/overview Nuclei项目地址&#xff1a;​​…