PythonWeb开发框架—Flask框架之flask-sqlalchemy、序列化和反序列化使用详解
1.安装依赖库
pip install flask-sqlalchemy
pip install pymysql
2.连接数据库配置
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__) #创建 Flask 应用实例#配置数据库连接
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:study123@127.0.0.1:3306/testdevelop?charset=utf8mb4'db=SQLAlchemy() #创建 SQLAlchemy 实例db.init_app(app) #将 db 实例与 Flask 应用绑定,激活数据库功能
3.定义表模型
#定义表模型
class TaskTest(db.Model):#手动定义表名, 否则默认为小写的类名__tablename__ ='task_test'#定义自增主键字段,格式为: 字段名 = db.Column(db.类型, 附加属性[主键/唯一性等])id = db.Column(db.Integer, primary_key=True, autoincrement=True)#定义唯一,且不能为空的字段iphonenumber=db.Column(db.String(15), unique=True, nullable=False)name = db.Column(db.String(128))
常见的表字段类型:
db.Integer 整数类型
db.Float 浮点数
db.String(length) 字符串类型,需指定长度
db.Boolean 布尔值
db.DateTime 时间,精确到秒
db.Date 日期,格式:年-月-日
db.Text 长文本类型,无长度限制
db.Column()里其他参数介绍:
primary_key 默认值为false,设置为true时,表示为表的主键
autoincrement 默认值为false,设置为True时,通常与primary_key一起使用,表示该字段是一个自增的主键
unique 默认值为false,设置为true时,表示该字段数据值唯一,不可重复
default 字段的默认值,可以是常量、变量、表达式
nullable 是否允许为空,默认值为True,表示允许为空
index 默认值false,设置为True表示该字段会被创建索引
foreign_key 表示该字段是一个外键,指向另一个表的主键,值=另一个表表名.字段名
server_ts 设置为true表示服务器会维护该字段的创建时间戳,通常用于审计和日志记录
4.数据迁移
定义表模型后,需要用flask-migrate完成对数据库实际的操作,步骤如下:
安装数据迁移同步工具:
pip install flask_migrate
导入模块:
from flask_migrate import Migrate
创建数据库迁移对象:
migrate = Migrate(app, db)
完整脚本如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrateapp = Flask(__name__) #创建 Flask 应用实例#配置数据库连接
app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:study123@127.0.0.1:3306/testdevelop?charset=utf8mb4'db=SQLAlchemy() #创建 SQLAlchemy 实例db.init_app(app) #将 db 实例与 Flask 应用绑定,激活数据库功能migrate = Migrate(app, db) #创建数据库迁移对象
Terminal里依次执行命令:
flask db init
flask db migrate
- flask db upgrade
三条指令的解释:
flask db init
该条命令一个项目执行一次即可,它的作用是创建存储迁移脚本的migrations目录。migrations目录下包含:
- versions文件夹:用来存放每次的迁移脚本
- alembic.ini:迁移工具Alembic的配置文件
- env.py:定义连接数据库的脚本
- script.py.mako:是Alembic迁移脚本模板文件,用于定义每次执行 flask db migrate 时生成的迁移脚本的结构和格式
flask db migrate
根据定义表模型的脚本变化,自动生成迁移脚本.py文件,脚本存放在migrations/versions下,脚本里包含应用变更upgrade()和 回滚变更downgrade()函数
flask db upgrade
执行所有未应用的迁移脚本中的upgrade()函数,实际操作数据库,完成创建表和新增表字段的操作,或者其他表结构变更的操作,同时在数据库中也会创建一个alembic_version表, 用来记录当前版本号
数据回滚操作:
flask db history #查找版本号
flask db downgrade <版本号> #回滚到指定版本
5.数据库操作
5.1 新增表
重新定义一个表模型,执行flask db migrate 和flask db upgrade即可
5.2 新增字段
直接在表模型类下添加字段,执行flask db migrate 和flask db upgrade即可
5.3 插入数据
先实列化表模型类,然后执行:db.session.add()和db.session.commit()
举例说明:
脚本内容:
调用接口:
数据库里检查数据落库情况:
5.4 查询数据
查询所有,返回值是对象:表模型类.query.all()
根据主键查询,返回值是对象:表模型类.query.get(主键)
返回第一条,返回值是对象:表模型类.query.first()
加简单条件查询,返回值是对象:表模型类.query.filter_by().all()
加复杂条件查询,返回值是对象:表模型类.query.filter().all()
查询某个字段的所有数据,返回值是具体的值:db.session.query(模型类.字段).all()
注:在没有反序列化前,输出的值前端不能展示
5.5 修改数据
修改一条数据的某个字段:
批量修改:
5.6 删除数据
删除一条数据:先查询,在删除
删除多条数据:直接执行delete()
6.序列化和反序列化
序列化:把前端数据转化为python对象,通过 Python脚本添加到数据库
反序列化:把Python对像转化为前端要的json格式
安装依赖库:
pip install flask-marshmallow
pip install marshmallow-sqlalchemy
导入模块
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
from marshmallow import post_load
构造模型器:
class TaskInfoSchema(SQLAlchemyAutoSchema):class Meta: #固定写法:Metamodel=TaskInfo() #定义表task_info的类名fields=['taskname','device_list'] #多个字段放在一个列表中
序列化器:重构load()
为什么要重构load():因为直接使用默认load()出来的还是原始字典,不是python对象,在db.session.add_all()时会报错。
序列化操作:
视图函数:
from flask import request@app.route('/loaddata',methods=['GET','POST'])
def loaddata():task_info_list=request.json.get("data")task_info=TaskInfoSchema()add_task_info=task_info.load(task_info_list,many=True)print(add_task_info)return '序列化成功'
前端调用:
数据库检查:
反序列操作:
视图函数:
from flask import jsonify, make_response@app.route('/dumpdata')
def dumpdata():all_records=TaskInfo.query.all()json_data=TaskInfoSchema().dump(all_records,many=True) #多条数据要加many=Truereturn make_response(jsonify(data=json_data), 200)
前端调用:
相关文章:

PythonWeb开发框架—Flask框架之flask-sqlalchemy、序列化和反序列化使用详解
1.安装依赖库 pip install flask-sqlalchemy pip install pymysql 2.连接数据库配置 from flask import Flask from flask_sqlalchemy import SQLAlchemyapp Flask(__name__) #创建 Flask 应用实例#配置数据库连接 app.config[SQLALCHEMY_DATABASE_URI]mysql://root:stud…...
如何监控 Pod 的 CPU/内存使用率,prometheus+grafana
一、监控 Pod 的 CPU/内存使用率的方法 1. 使用 kubectl top 命令(临时检查) # 查看所有 Pod 的资源使用率(需安装 Metrics Server) kubectl top pods --all-namespaces # 查看指定命名空间的 Pod kubectl top pods -n <n…...
Spring Batch 概览
Spring Batch 是什么? Spring Batch 是 Spring 生态系统中的一个轻量级批处理框架,专门用于处理大规模数据任务。它特别适合企业级应用中需要批量处理数据的场景,比如数据迁移、报表生成、ETL(Extract-Transform-Load)…...

用Deepseek写一个五子棋微信小程序
在当今快节奏的生活中,休闲小游戏成为了许多人放松心情的好选择。五子棋作为一款经典的策略游戏,不仅规则简单,还能锻炼思维。最近,我借助 DeepSeek 的帮助,开发了一款五子棋微信小程序。在这篇文章中,我将…...
AF3 squeeze_features函数解读
AlphaFold3 data_transforms 模块的 squeeze_features 函数的作用去除 蛋白质特征张量中不必要的单维度(singleton dimensions)和重复维度,以使其适配 AlphaFold3 预期的输入格式。 源代码: def squeeze_features(protein):&qu…...

Python 远程抓取服务器日志最后 1000行
哈喽,大家好,我是木头左! 一、神奇的 Python 工具箱 1. SSH 连接的密钥——paramiko paramiko 库提供了丰富的方法来处理 SSH 连接的各种细节。从创建连接对象,到执行远程命令,再到获取命令输出,它都能有…...

vue3+screenfull实现部分页面全屏(遇到的问题会持续更新)
需求:除了左侧菜单,右侧主体部分全部全屏 首先下载screenfull全屏插件 npm install screenfull --save页面引入 import screenfull from screenfull;我这里是右上角全屏图标 <el-iconref"elIconRef"color"#ffffff"size"2…...
Ubuntu 下 nginx-1.24.0 源码分析 (1)
main 函数在 src\core\nginx.c int ngx_cdecl main(int argc, char *const *argv) {ngx_buf_t *b;ngx_log_t *log;ngx_uint_t i;ngx_cycle_t *cycle, init_cycle;ngx_conf_dump_t *cd;ngx_core_conf_t *ccf;ngx_debug_init(); 进入 main 函数 最…...

2025数据存储技术风向标:解析数据湖与数据仓库的实战效能差距
一、技术演进的十字路口 当前全球数据量正以每年65%的复合增长率激增,IDC预测到2027年企业将面临日均处理500TB数据的挑战。在这样的背景下,传统数据仓库与新兴数据湖的博弈进入白热化阶段。Gartner最新报告显示,采用混合架构的企业数据运营效…...

探索高性能AI识别和边缘计算 | NVIDIA Jetson Orin Nano 8GB 开发套件的全面测评
随着边缘计算和人工智能技术的迅速发展,性能强大的嵌入式AI开发板成为开发者和企业关注的焦点。NVIDIA近期推出的Jetson Orin Nano 8GB开发套件,凭借其40 TOPS算力、高效的Ampere架构GPU以及出色的边缘AI能力,引起了广泛关注。本文将从配置性…...

数据结构 常见的排序算法
🌻个人主页:路飞雪吖~ 🌠专栏:数据结构 目录 🌻个人主页:路飞雪吖~ 一、插入排序 🌟直接插入排序 🌟希尔排序 二、选择排序 🌟选择排序 🌟堆排序…...
ES索引知识
索引是数据的载体,存储了文档和映射的信息 索引是具有相同结构的文档的合集体。 设置索引,不仅仅是设置索引名字,还有索引的一些配置,比如:分片和副本,刷新频率,搜索结果的最大参数,…...
FreeRTOS第17篇:FreeRTOS链表实现细节05_MiniListItem_t:FreeRTOS内存优化
文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 1 为什么需要迷你列表项? 在嵌入式系统中,内存资源极其宝贵。FreeRTOS为满足不同场景需求,设计了标准列表项(ListItem_…...
Golang | Gin(简洁版)
文章目录 安装使用RESTful API响应页面获取请求参数路由讲解中间件 安装使用 Gin 是一个 golang 的微框架,封装比较优雅,API 友好,源代码比较明确。具有快速灵活,容错方便等特点。其实对于 golang 而言,web 框架的依赖…...

RAG外挂知识库
目录 RAG的工作流程 python实现RAG 1.引入相关库及相关准备工作 函数 1. 加载并读取文档 2. 文档分割 3. embedding 4. 向集合中添加文档 5. 用户输入内容 6. 查询集合中的文档 7. 构建Prompt并生成答案 主流程 附录 函数解释 1. open() 函数语法 2.client.embe…...

Rust语言:开启高效编程之旅
目录 一、Rust 语言初相识 二、Rust 语言的独特魅力 2.1 内存安全:消除隐患的护盾 2.2 高性能:与 C/C++ 并肩的实力 2.3 强大的并发性:多线程编程的利器 2.4 跨平台性:适配多环境的优势 三、快速上手 Rust 3.1 环境搭建:为开发做准备 3.2 第一个 R…...

蓝桥杯备考:图论初解
1:图的定义 我们学了线性表和树的结构,那什么是图呢? 线性表是一个串一个是一对一的结构 树是一对多的,每个结点可以有多个孩子,但只能有一个父亲 而我们今天学的图!就是多对多的结构了 V表示的是图的顶点集…...
Codeforces Round 502 E. The Supersonic Rocket 凸包、kmp
题目链接 题目大意 平面上给定两个点集,判定两个点集分别形成的凸多边形能否通过旋转、平移重合。 点集大小 ≤ \leq ≤ 1 0 5 10^{5} 105,坐标范围 [0, 1 0 8 10^{8} 108 ]. 思路 题意很明显,先求出凸包再判断两凸包是否同构。这里用…...
机器人匹诺曹机制,真话假话平衡机制
摘要: 本文聚焦于机器人所采用的一种“匹诺曹机制”,该机制旨在以大概率保持“虚拟鼻子”(一种象征虚假程度的概念)不会过长,通过在对话中夹杂真话与假话来实现。文章深入探讨了这一机制的原理,分析其背后的…...

用Python分割并高效处理PDF大文件
在处理大型PDF文件时,将它们分解成更小、更易于管理的块通常是有益的。这个过程称为分区,它可以提高处理效率,并使分析或操作文档变得更容易。在本文中,我们将讨论如何使用Python和为Unstructured.io库将PDF文件划分为更小的部分。…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...