FASTAPI第二天
FastAPI入门以及代码进化一、什么是ORM1.1ORM的概念以及优势二、环境搭建和FastAPI集成2.1 安装依赖2.2 与MYSQL的使用2.3项目结构搭建2.4数据库配置文件三、增删改查的实现3.1查找3.2增加3.3修改3.4删除1.1.1ORM全称为Object-Relational Mapping对象关系映射、它的核心思想是用pychon类来代表数据库中的表1.1.2ORM 的优势面向对象用 Python 代码替代 SQL 语句更符合编程思维。安全性自动进行参数化查询防止 SQL 注入攻击。跨数据库同一套代码可以无缝切换 SQLite、PostgreSQL、MySQL 等数据库。关系管理自动处理表与表之间的外键、多对多等关系。可维护性表结构集中定义在模型类中修改和管理更方便。二、环境搭建和FastAPI集成2.1 安装依赖要使用 Tortoise-ORM 与 FastAPI 集成需要安装以下依赖# 安装 Tortoise-ORM 核心库pipinstalltortoise-orm# MySQL 异步驱动推荐 asyncmypipinstallasyncmy# 或者使用 aiomysql# pip install aiomysql# 安装 Aerich 迁移工具用于数据库迁移pipinstallaerich# 安装 FastAPI 和 Uvicornpipinstallfastapiuvicorn[standard]依赖说明tortoise-orm: 异步 ORM 核心库提供模型定义、查询等 ORM 功能asyncmy: 高性能 MySQL 异步驱动推荐aiomysql: 另一个 MySQL 异步驱动备选aerich: Tortoise-ORM 的数据库迁移工具fastapi: 现代、快速的 Web 框架uvicorn: ASGI 服务器用于运行 FastAPI 应用验证安装安装完成后可以创建一个简单的 Python 文件验证依赖是否安装成功# test_install.pyimporttortoiseimportasyncmyimportaerichimportfastapiimportuvicornprint(Tortoise-ORM version:,tortoise.__version__)print(FastAPI version:,fastapi.__version__)print(Uvicorn version:,uvicorn.__version__)print(所有依赖安装成功)运行验证脚本python test_install.py如果一切正常将看到各个库的版本信息输出。三、增删改查的实现3.1 查找常用方法包括await Model.all()查询全部记录。await Model.filter(...)按条件过滤。await Model.get_or_none(...)按条件查询单条查不到返回None避免抛异常。await Model.filter(...).count()统计数量。await Model.all().order_by(-priority)按字段排序-表示倒序。示例获取所有任务并统计状态task_api.get(/all,summary获取所有任务信息,description获取所有任务信息)asyncdefgetAllTask():tasks1awaitTasks.all().order_by(-priority)count1awaitTasks.filter(status1).count()count0awaitTasks.filter(status0).count()count2awaitTasks.filter(status2).count()return{code:1,message:success,data:{任务列表:tasks1,总任务数量:len(tasks1),待办数量:count0,进行中数量:count1,已完成数量:count2}}这里的Tasks.all()会返回全部任务order_by(-priority)表示按优先级从高到低排序filter(status0).count()则统计不同状态的任务数量。示例按 ID 查找单条任务task_api.get(/today_count,summary今日到期任务数量,description统计今日到期且未完成的任务数量)asyncdeftoday_count():todaydatetime.now().replace(hour0,minute0,second0,microsecond0)tomorrowtodaytimedelta(days1)countawaitTasks.filter(due_date__gtetoday,due_date__lttomorrow,status__in[0,1]).count()return{code:1,message:success,data:count}filter(due_date__gtetoday, due_date__lttomorrow, status__in[0,1])展示了条件查询__gte大于等于greater than or equal。__lt小于less than。__in字段值在列表中。示例获取所有用户user_api.get(/all,summary获取所有用户信息,description获取所有用户信息)asyncdefgetAllUser():users1awaitUser.all()return{code:1,message:success,data:users1}3.2 增加新增数据有两种常见方式await Model.create(**kwargs)直接创建并保存到数据库返回模型实例。model Model(**kwargs); await model.save()先实例化再手动保存。示例创建任务task_api.post(/add,summary添加任务,description添加任务)asyncdefadd(task:TaskAdd):datatask.model_dump()ifhasattr(task,model_dump)elsedict(task)data[user_id]data.pop(user)task1awaitTasks.create(**data)return{code:1,message:添加成功,data:task1}这里TaskAdd是 Pydantic 请求模型。由于Tasks表中的外键字段名是user_id但前端传入的是user所以通过data[user_id] data.pop(user)做了一个字段映射。最后调用Tasks.create(**data)完成插入。示例创建用户user_api.post(/add,summary添加用户,description添加用户)asyncdefgetadd(user:UseraddRequest):user2User(**dict(user))awaituser2.save()return{code:1,message:添加成功,data:user2}这里先用User(**dict(user))实例化模型对象再调用await user2.save()保存到数据库。两种方式效果相同选择哪种主要看个人习惯。3.3 修改修改流程通常是先用get_or_none查出目标记录。判断记录是否存在不存在则返回提示。修改对应字段。调用await model.save()保存。示例更新任务信息task_api.put(/update/{id},summary更新任务信息,description更新任务信息)asyncdefedit(task:TaskEdit,id:int):task3awaitTasks.get_or_none(idid)iftask3isNone:return{code:0,message:任务不存在,data:None}task3.usertask.user task3.titletask.title task3.descriptiontask.description task3.statustask.status task3.prioritytask.priority task3.due_datetask.due_date task3.complete_datetask.complete_dateawaittask3.save()return{code:1,message:更新成功,data:task3}示例更新任务状态task_api.put(/{id}/status,summary切换任务状态,description切换到已完成时自动记录完成时间切回其他状态时清空完成时间)asyncdefupdate_status(id:int,status:int):taskawaitTasks.get_or_none(idid)iftaskisNone:return{code:0,message:任务不存在,data:None}task.statusstatusifstatus2:task.complete_datedatetime.now()else:task.complete_dateNoneawaittask.save()return{code:1,message:状态切换成功,data:task}update_status里除了修改状态还根据业务规则自动处理complete_date切换到已完成时记录当前时间切回其他状态时清空完成时间。示例更新用户信息user_api.put(/update/{id},summary更新用户信息,description更新用户信息)asyncdefedit(user:UserEditRequest,id:int):user3awaitUser.get_or_none(idid)ifuser3isNone:return{code:0,message:用户不存在,data:None}user3.usernameuser.username user3.emailuser.email user3.phoneuser.phone user3.is_activeuser.is_activeawaituser3.save()return{code:1,message:更新成功,data:user3}3.4 删除删除流程与修改类似先查到对象再调用await model.delete()。示例删除任务task_api.delete(/delete/{id},summary删除任务,description删除任务)asyncdefdelete(id:int):task4awaitTasks.get_or_none(idid)awaittask4.delete()return{code:1,message:删除成功,data:None}示例删除用户user_api.delete(/delete/{id},summary删除用户,description删除用户)asyncdefdelete(id:int):user4awaitUser.get_or_none(idid)awaituser4.delete()return{code:1,message:删除成功,data:None}小结通过上面的代码可以看到Tortoise-ORM 下的 CRUD 操作非常接近自然语言查all()、filter()、get_or_none()、count()增create()或save()改查出来 → 改字段 →save()删查出来 →delete()所有操作都别忘了加await因为 Tortoise-ORM 是原生异步的。另外真实的业务代码里通常会做空值判断if task is None和字段映射如user_id与user以保证接口健壮性。

相关新闻

sherpa-onnx:下一代Kaldi语音AI的12种编程语言跨平台革命

sherpa-onnx:下一代Kaldi语音AI的12种编程语言跨平台革命

sherpa-onnx:下一代Kaldi语音AI的12种编程语言跨平台革命 【免费下载链接】sherpa-onnx Speech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connecti…

2026/7/24 7:44:57 阅读更多 →
Agent Memory:分层管理让AI更智能,小白也能轻松掌握大模型核心!

Agent Memory:分层管理让AI更智能,小白也能轻松掌握大模型核心!

Agent Memory是AI Agent的“工作记忆系统”,它通过分层管理(用户偏好、任务状态、事实知识、操作痕迹)实现信息的有效存储、检索、更新和遗忘,帮助Agent可靠地跨轮次、跨工具、跨天工作。设计Memory的关键在于合理分层&#xff0c…

2026/7/24 22:14:00 阅读更多 →
plpgsql_check 实战:5个常见PL/pgSQL错误检测与修复案例

plpgsql_check 实战:5个常见PL/pgSQL错误检测与修复案例

plpgsql_check 实战:5个常见PL/pgSQL错误检测与修复案例 【免费下载链接】plpgsql_check plpgsql_check is a linter tool (does source code static analyze) for the PostgreSQL language plpgsql (the native language for PostgreSQL store procedures). 项目…

2026/7/25 0:39:12 阅读更多 →

最新新闻

SpERT模型评估全攻略:从准确率到F1分数的完整指标解析

SpERT模型评估全攻略:从准确率到F1分数的完整指标解析

SpERT模型评估全攻略:从准确率到F1分数的完整指标解析 【免费下载链接】spert PyTorch code for SpERT: Span-based Entity and Relation Transformer 项目地址: https://gitcode.com/gh_mirrors/sp/spert SpERT(Span-based Entity and Relation …

2026/7/25 21:48:34 阅读更多 →
隐私、合规与伦理——人脸识别不只是技术问题

隐私、合规与伦理——人脸识别不只是技术问题

人脸识别可能是AI领域里最具争议的技术,没有之一。 它能帮警察找到走失老人,也能被用来在商场里偷偷记录你的行踪;它能让你刷脸进站省去排队时间,也能让你的生物特征在不知情的情况下被采集和贩卖。同一个技术,用在不同…

2026/7/25 21:48:34 阅读更多 →
Brainfly: 用 C# 类型系统构建 Brainfuck 编译器

Brainfly: 用 C# 类型系统构建 Brainfuck 编译器

Brainfly: 用 C# 类型系统构建 Brainfuck 编译器 引言:从 Brainfuck 到类型魔法Brainfuck 是一种极简的图灵完备编程语言,仅由 8 个指令组成。而 C# 的类型系统则以其强大的泛型、模式匹配和递归能力著称。本文将带你探索一个有趣的项目——Brainfly&…

2026/7/25 21:48:34 阅读更多 →
炉石传说闪退问题排查与解决全攻略

炉石传说闪退问题排查与解决全攻略

这次我们来看一个游戏玩家经常遇到的问题:炉石传说闪退。作为暴雪旗下的热门卡牌游戏,炉石传说在Windows平台上偶尔会出现启动闪退、游戏过程中突然退出等问题。本文基于实际测试经验,整理了一套从基础排查到深度解决的完整方案。 炉石传说闪退可能由多种原因引起,包括显卡…

2026/7/25 21:48:34 阅读更多 →
大模型与AI应用:小白程序员转型AI Agent工程师的收藏攻略

大模型与AI应用:小白程序员转型AI Agent工程师的收藏攻略

随着AI行业从输出文字转向自主完成任务,Agent工程师成为AI赛道的刚需人才。文章建议后端开发者按照特定路线转型AI,包括学习AI基础、掌握大模型应用、理解智能体开发等,并提供了相应的学习路线图。对于想要在AI领域发展的程序员,特…

2026/7/25 21:48:34 阅读更多 →
大模型显存占用计算与优化实践

大模型显存占用计算与优化实践

1. 大模型显存占用计算基础大型语言模型在推理过程中的显存占用主要来自模型参数、中间激活值和KV缓存三部分。以GLM-4-9B-chat为例,这个90亿参数的模型在实际部署时需要精确计算显存需求才能合理配置硬件。1.1 模型参数的内存占用模型参数占用的显存计算公式为&…

2026/7/25 21:47:33 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻