Python Flask框架 -- flask-migrate迁移ORM模型

# 之前使用的这个db.create_all()很有局限性,它不能把在class里修改的东西同步上数据库,所以不用了
# with app.app_context():  # 请求应用上下文
#     db.create_all()  # 把所有的表同步到数据库中去

例如,在User类中增加一个email字段:

class User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(100), nullable=False)password = db.Column(db.String(100), nullable=False)email = db.Column(db.String(100))

 运行后在数据库中刷新并没有更新:

所以这个db.create_all()很有局限性。

下面使用新方法:
首先在命令行或者在终端输入 pip install flask-migrate 安装插件,确保是安装在与项目对应的虚拟环境,所以在终端上安装不会有问题,这里我用命令行做示范:

win + R 输入 cmd 回车,然后输入上面的指令,等待安装完即可

在项目开头导入才能使用
from flask_migrate import Migrate
db = SQLAlchemy(app)# 创建对象,使用它来将ORM模型映射到数据库
migrate = Migrate(app, db)

在数据库中删除这2个之前存在的表,以便看出变化:

下面正式开始:

第一步:

# ORM模型映射成表的三步(在项目终端执行)
# 1.flask db init (类似于git仓库初始化),这步只需要执行一次

执行前:

执行后在项目中会多出一个文件夹migrations,这是迁移脚本初始化:

    

第二步:

# 2.flask db migrate 识别ORM模型的改变,生成迁移脚本

执行前,versions文件夹里面是空的:

 

执行后就会看到versions里面生成了脚本:

第三步:

# 3.flask db upgrade 运行迁移脚本,同步到数据库中

运行前数据库中为空:

运行后:

刷新数据库就可以看到同步过来的表了:

其中alembic_version是用来记录迁移脚本版本号的

     

此时可以看到email已经创建成功:

如果我们要新增一个字段signature:

class User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(100), nullable=False)password = db.Column(db.String(100), nullable=False)email = db.Column(db.String(100))signature = db.Column(db.String(100))

分别在终端执行第二第三步就行了:

# 2.flask db migrate 识别ORM模型的改变,生成迁移脚本
# 3.flask db upgrade 运行迁移脚本,同步到数据库中

执行后在数据库中刷新就能看到新增的字段了:

app.py 完整代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrateapp = Flask(__name__)# MySQL所在的主机名或域名
HOSTNAME = '127.0.0.1'
# MySQL监听的端口号,默认3306
PORT = 3306
# 连接MySQL的用户名,用自己的
USERNAME = 'root'
# 连接MySQL的密码,用自己的
PASSWORD = '***'
# MySQL上创建的数据库名称
DATABASE = 'database_learn'app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4'# 在app.config中设置好连接数据库的信息
# 然后使用SQLAlchemy(app)创建一个db对象
# SQLAlchemy会自动读取app.config中连接数据库的信息
db = SQLAlchemy(app)# 创建对象,使用它来将ORM模型映射到数据库
migrate = Migrate(app, db)# ORM模型映射成表的三步(在项目终端执行)
# 1.flask db init (类似于git仓库初始化),这步只需要执行一次
# 2.flask db migrate 识别ORM模型的改变,生成迁移脚本
# 3.flask db upgrade 运行迁移脚本,同步到数据库中class User(db.Model):__tablename__ = 'user'id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(100), nullable=False)password = db.Column(db.String(100), nullable=False)email = db.Column(db.String(100))signature = db.Column(db.String(100))# 之前使用的这个db.create_all()很有局限性,它不能把在class里修改的东西同步上数据库,所以不用了
# with app.app_context():  # 请求应用上下文
#     db.create_all()  # 把所有的表同步到数据库中去@app.route('/')
def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()

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

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

相关文章

STM32和GD32内部时钟与外部时钟讲解

STM32F103为例: 1. 当 HSI 被用作 PLL 时钟输入时,可以实现的最大系统时钟频率为 64 MHz。 2. 要使 USB 功能可用,必须同时启用 HSE 和 PLL,并使 USBCLK 运行在 48 MHz。 3. 要实现 ADC 转换时间为 1 s,APB2 必须为 14 MHz、28 MHz 或 56 MHz。 ①. HSE = 高速外部时钟信号…

浅谈机器学习分类

I. 前言 在这个信息时代,数据的快速发展促进了人工智能(AI)等智能化技术的迅速发展。机器学习(Machine Learning)作为人工智能的重要分支之一,在数据处理、预测分析、模式识别等方面具有广泛的应用。前言的…

[linux初阶][vim-gcc-gdb] OneCharter: vim编辑器

一.vim编辑器基础 目录 一.vim编辑器基础 ①.vim的语法 ②vim的三种模式 ③三种模式的基本切换 ④各个模式下的一些操作 二.配置vim环境 ①手动配置(不推荐) ②自动配置(推荐) vim是vi的升级版,包含了更加丰富的功能. ①.vim的语法 vim [文件名] ②vim的三种模式 命令…

爬取搜狗翻译项目实例

视频中讲解的是百度翻译,但是视频中的方法现在已经不适用了,因为他们对 URL 的参数进行了修改,导致没法直接修改参数来爬取对应的翻译结果,这里我使用搜狗翻译来做演示,原理是一样的。 我们搜索的关键字会返回在 URL 中…

家用超声波清洗机高端品牌推荐!4款值得入手的热门超声波清洗机

急着洗眼镜的朋友先不要慌,虽然洗眼镜是日常生活中最常见的操作,但是在清洗眼镜方面也是有讲究的,不是随随便便把眼镜擦一下就算清洁干净了!因为我们拿眼镜布擦眼镜的时候,布料粗糙的微粒就会跟砂纸一样打磨着镜片&…

【python】flask模板渲染引擎Jinja2中的模板继承,简化前端模块化开发

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

[树莓派5][linux][已解决] arecord -D “plughw:1,0“ 的设备序号怎么确定?

我们常用这条命令来测试麦克风录音&#xff1a; arecord -D "plughw:1,0" -f dat -c 1 -r 16000 -d 10 test.wav 其中plughw:1,0这个格式是&#xff1a; plughw:<card>,<device> 我们先用这条命令来查看设备&#xff1a; aplay -l 我查询到的是 **** Li…

Python:语法糖

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 在编程世界中&#xff0c;有一个词语听起来既甜蜜又神秘&#xff1a;语法糖&#xff08;Syntactic Sugar&#xff09;。这个术语并不是指真正的糖…

什么是Prompt Tuning?

本文是观看视频What is Prompt Tuning?后的笔记。 大语言模型&#xff08;如ChatGPT &#xff09;是基础模型&#xff0c;是经过互联网上大量知识训练的大型可重用模型。 他们非常灵活&#xff0c;同样的模型可以分析法律文书或撰写文章。 但是&#xff0c;如果我们需要用其解…

欧拉操作系统安装opengauss高斯数据库加postgis

怎么在openeuler20.03 x86_64上的opengauss 5.0安装yukon Issue #I8XT22 openGauss/Yukon - Gitee.com 1、拉取镜像 docker pull registry.cn-beijing.aliyuncs.com/supermap/yukon:2.0-opengauss5.0.0-amd64 2、运行加载 mkdir -p /Yukon/opengauss docker run --name Y…

浅析机器学习的步骤与方法

一、引言&#xff1a; 机器学习是人工智能的分支之一&#xff0c;旨在研究如何使计算机系统自主地从数据中学习&#xff0c;并能够根据以往的经验做出预测或决策。现代机器学习主要使用统计学、概率论和优化算法来构建模型和训练算法。 应用场景&#xff1a; 机器学习在众多领…

cocos3.0 关于UI组件学习

Sprite 图片&#xff1a;官方文档 Size Mode: 1.Raw&#xff1a;原始大小 2.TRIMMED: 默认&#xff0c;会裁切原始图片透明像素 3.Custom&#xff1a;自定义&#xff0c;只要修改ContentSize&#xff0c;会自动设置 Type 1.Simple:普通,会铺满&#xff0c;一张图。 2.Sliced…

Python:json.dumps()

json.dumps() 是Python中json模块提供的一个方法&#xff0c;用于将Python对象&#xff08;如字典、列表、字符串等&#xff09;转换为其JSON编码的字符串。其最常用于将Python数据结构转换成JSON格式的数据&#xff0c;这进而可以作为HTTP响应发送给前端&#xff0c;或者保存在…

力扣热门算法题 89. 格雷编码,92. 反转链表 II,93. 复原 IP 地址

89. 格雷编码&#xff0c;92. 反转链表 II&#xff0c;93. 复原 IP 地址&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.24 可通过leetcode所有测试用例。 目录 89. 格雷编码 解题思路 完整代码 Python Java 92. 反转链表…

C++之STL整理(2)之vector超详用法整理

C之STL整理&#xff08;2&#xff09;之vector用法&#xff08;创建、赋值、方法&#xff09;整理 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的vector用法整理 C之STL整…

苹果智能戒指专利获批,Find My功能为智能穿戴提供智能防丢

根据美国商标和专利局&#xff08;USPTO&#xff09;近日公示的清单&#xff0c;苹果公司获得了一项关于智能戒指的专利&#xff0c;展示了多种交互手势&#xff0c;不仅支持捏合、画圈等&#xff0c;而且支持玩“石头剪刀布”游戏。 这项新专利名为“皮肤间接触检测”&#xf…

解决“ValueError: negative dimensions are not allowed”错误的全面指南

一、问题背景与错误描述 在使用numpy库进行数组操作时&#xff0c;有时会遇到一个常见的错误&#xff1a;“ValueError: negative dimensions are not allowed”。这个错误通常发生在尝试创建或者调整numpy数组的形状时&#xff0c;提供的维度&#xff08;shape&#xff09;参数…

南京观海微电子---Vitis HLS设计流程介绍——Vitis HLS教程

1. 传统的FPGA设计流程 传统的RTL设计流程如下图所示&#xff1a; 传统的FPGA RTL设计流程主要是采用VHDL、VerilogHDL或System Verilog进行工程的开发&#xff0c;同时也是通过硬件描述语言来编写测试案例&#xff08;Test Bench&#xff09;对开发的工程进行仿真验证。 随后…

第十六节 JDBC PrepareStatement对象执行批量处理实例

以下是使用PrepareStatement对象进行批处理的典型步骤顺序 - 使用占位符创建SQL语句。使用prepareStatement()方法创建PrepareStatement对象。使用setAutoCommit()将自动提交设置为false。使用addBatch()方法在创建的Statement对象上添加SQL语句到批处理中。在创建的Statement…

基于单片机热电偶智能体温检测系统设计

**单片机设计介绍&#xff0c;基于单片机热电偶智能体温检测系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机热电偶智能体温检测系统设计概要 一、引言 本系统旨在通过单片机实现对人体体温的智能检测&#…