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文件划分为更小的部分。…...
3步打造开源工具效率引擎:QtScrcpy自定义配置全指南
3步打造开源工具效率引擎:QtScrcpy自定义配置全指南 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy …...
bert-base-chinese新手教程:从零开始学习中文预训练模型部署与使用
bert-base-chinese新手教程:从零开始学习中文预训练模型部署与使用 1. 认识bert-base-chinese模型 1.1 什么是BERT模型 BERT(Bidirectional Encoder Representations from Transformers)是Google在2018年发布的预训练语言模型。它通过大规…...
Linux服务器GPU环境配置避坑指南:从Nvidia驱动到PyTorch Lightning一站式搞定
Linux服务器GPU环境配置避坑指南:从Nvidia驱动到PyTorch Lightning一站式搞定 当你第一次在Linux服务器上配置GPU环境时,可能会遇到各种令人抓狂的问题:驱动安装失败、CUDA版本不兼容、PyTorch无法识别GPU...这些问题足以让任何一个开发者崩溃…...
如何快速打造微信风格视频编辑功能?推荐开源神器WeiXinRecordedDemo
如何快速打造微信风格视频编辑功能?推荐开源神器WeiXinRecordedDemo 【免费下载链接】WeiXinRecordedDemo 仿微信视频拍摄UI, 基于ffmpeg的视频录制编辑 项目地址: https://gitcode.com/gh_mirrors/we/WeiXinRecordedDemo WeiXinRecordedDemo是一款基于FFmpe…...
MATLAB 数值计算辅助:分析 Stable Yogi 生成图像的色彩与纹理特征
MATLAB 数值计算辅助:分析 Stable Yogi 生成图像的色彩与纹理特征 1. 引言 最近在尝试用 Stable Yogi 生成一些皮革纹理的设计图,效果确实挺惊艳的。但生成得多了,就遇到一个新问题:我手头攒了几百张图,风格各异&…...
PySide6商业项目避坑指南:从许可证验证到Qt Designer实战
PySide6商业项目避坑指南:从许可证合规到UI开发实战 当企业开发者选择PySide6作为桌面应用开发框架时,往往会被其商业友好的LGPL许可证所吸引。但真正落地到项目开发中,从法律合规到技术实现都存在诸多需要特别注意的细节。本文将深入剖析那些…...
OpenClaw版本升级:nanobot镜像迁移全记录
OpenClaw版本升级:nanobot镜像迁移全记录 1. 升级背景与准备工作 去年我在本地部署了基于OpenClaw v1.2的nanobot镜像,这套系统一直稳定运行着我的自动化办公流程。直到上个月收到社区通知,新版本v2.1重构了核心架构,特别是技能…...
开发者专属OpenClaw配置:nanobot镜像对接VSCode插件开发
开发者专属OpenClaw配置:nanobot镜像对接VSCode插件开发 1. 为什么选择nanobot镜像进行VSCode插件开发 去年我在开发一个智能代码补全插件时,发现市面上大多数AI辅助工具都存在响应延迟高、隐私性差的问题。直到接触到OpenClaw生态下的nanobot镜像&…...
实战指南:基于快马平台快速开发树莓派远程视频监控系统
最近在折腾树莓派,想做个简单的远程监控系统。之前总卡在环境配置和代码调试上,后来发现用InsCode(快马)平台可以快速生成可运行的项目骨架,省去了不少麻烦。这里分享下我的实现过程: 硬件准备 树莓派4B搭配官方摄像头模块是最基础…...
Obsidian插件本地化全攻略:从英文界面到中文体验的完整实施路径
Obsidian插件本地化全攻略:从英文界面到中文体验的完整实施路径 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 在全球化协作与知识管理的场景中,Obsidian插件的英文界面常成为用户高效使用的障碍。…...
