当前位置: 首页 > news >正文

day01-FastAPI初识(补充day0.5)以及Tortoise-ORM

# 路径参数与查询参数:

1.路径参数(Path Parameters):

指在路由路径后跟上参数,形如@app.get("/items/{id}"),路径参数是URL路径中的动态可变部分,格式为{参数名},用于标识「具体的资源」(如物品ID、用户ID)。例如:

  • /items/11是路径参数item_id的值
  • /users/100100是路径参数user_id的值

FastAPI会自动提取路径中的对应值,并传递给路由处理函数。

2.查询参数(Query Parameters):

查询参数是URL中?后面的键值对组合,格式为key1=value1&key2=value2,用于对资源进行「筛选、分页、排序」等辅助操作。例如:

  • /items?skip=0&limit=10skip(跳过条数)、limit(查询条数)是查询参数
  • /users?name=张三&age=20name(姓名)、age(年龄)是查询参数

核心特点:

  • 可选性:默认可省略,可设置默认值
  • 辅助性:不用于标识唯一资源,仅用于过滤、分页等
  • 灵活性:支持单个键对应多个值(如/items?tags=fruit&tags=cheap

3.区别:

对比维度

路径参数

查询参数

位置

URL路径中(/items/{item_id}

URL后缀(?skip=0&limit=10

必要性

必填(默认)

可选(默认,可设置必填)

核心用途

标识唯一资源(如ID、UID)

筛选、分页、排序等辅助操作

配置工具

Path

Query

示例场景

/items/1/users/100

/items?limit=10/users?name=张三

为什么需要Query类型注解?

基础的查询参数写法(如skip: int = 0)只能实现「类型校验+默认值」,但实际开发中需要更精细的控制:

  • 分页参数limit必须≥1且≤50(范围校验)
  • 搜索关键词q长度必须≤100(长度限制)
  • 筛选标签tags支持多个值传入(多值参数)
  • 接口文档需要显示查询参数的详细描述(元数据配置)

Query类型注解正是为解决这些问题而生,它是FastAPI提供的「查询参数高级配置工具」,与Path注解同源(均基于Pydantic),功能互补。

# Tortoise-ORM

我们在django框架的业务功能中采用过ORM查询,与之对应的,FastAPI也有其对应的ORM,称为:Tortoise-ORM

ORM 全称是 Object-Relational Mapping(对象关系映射) 。它的核心思想是:用 Python 类来代表数据库中的表,用类的实例来代表表中的一行记录.没有ORM时,我们需要手写SQL来操作数据库,代码量大且易出错.使用ORM后,我们仅需要操作 Python 对象.

ORM 的优势:

  • 面向对象:用 Python 代码替代 SQL 语句,更符合编程思维。
  • 安全性:自动进行参数化查询,防止 SQL 注入攻击。
  • 跨数据库:同一套代码可以无缝切换 SQLite、PostgreSQL、MySQL 等数据库。
  • 关系管理:自动处理表与表之间的外键、多对多等关系。
  • 可维护性:表结构集中定义在模型类中,修改和管理更方便。

为什么选择 Tortoise-ORM?

在 Python 异步 Web 开发中,传统的 ORM(如 SQLAlchemy 1.x 的同步模式)在执行数据库查询时会阻塞整个线程,这与 FastAPI 的异步非阻塞理念背道而驰。

Tortoise-ORM 的特点:

  • 原生异步:基于asyncio构建,所有数据库操作都是异步的,不会阻塞事件循环。
  • Django 风格的 API:如果你用过 Django ORM,会发现语法非常熟悉,上手极快。
  • 轻量级:专注于核心功能,没有冗余的抽象层,性能出色。
  • 完整的关系支持:支持外键、一对一、多对多等所有常见关系类型。
  • 内置 Pydantic 集成:可以通过pydantic_model_creator自动从 Tortoise 模型生成 Pydantic 模型,无缝对接 FastAPI 的请求/响应校验。

同步 ORM vs 异步 ORM 对比

维度

同步 ORM(如 Django ORM)

异步 ORM(Tortoise-ORM)

执行方式

阻塞当前线程

非阻塞,协程挂起

并发能力

依赖多线程/多进程

单线程高并发

语法

user = User.objects.get(id=1)

user = await User.get(id=1)

适用框架

Django、Flask

FastAPI、Sanic、aiohttp

后端 FastAPI 核心开发流程

  1. 初始化 FastAPI 主应用实例,配置跨域中间件,解决前端网页跨域请求报错
  2. 定义 Tortoise ORM 数据模型,和 MySQL 数据表字段一一映射,设置主键、默认值、自动创建 / 更新时间
  3. 编写 Pydantic 数据校验模型:约束前端传入参数的类型、长度、必填项,实现请求数据自动校验
  4. 逐个编写业务接口(全部使用async def异步函数,符合 Tortoise 异步 ORM 规范)
    • 登录接口:接收账号密码,模拟返回 Token 与用户信息(本次作业免后端鉴权校验)
    • 查询列表接口:接收查询参数(状态筛选、关键词搜索、排序规则),ORM 链式条件查询返回数据
    • 新增接口:接收表单参数,绑定固定用户 ID,ORM 插入单条数据
    • 编辑接口:根据路径参数 ID 定位数据,执行字段局部更新
    • 单字段状态修改接口:单独更新任务状态,附带业务逻辑(完成则写入完成时间,其他状态清空该字段)
    • 删除接口:根据 ID 删除对应数据
    • 数据统计接口:使用 ORM 计数聚合查询,统计各类任务数量
  5. 绑定 Tortoise ORM 与 FastAPI 项目,配置数据库连接地址,实现项目启动自动连接数据库
  6. 启动 uvicorn 服务,在浏览器/docs接口文档页面手动调试后端所有接口,确保单后端功能正常
http://www.jsqmd.com/news/1227839/

相关文章:

  • Loop:用视觉化操作重新定义macOS窗口管理体验
  • 告别文档下载困境:30+平台一键保存的浏览器脚本解决方案
  • 魔兽争霸III地图编辑器HiveWE:快速上手现代化地图制作完全指南
  • 终极指南:3种简单方法彻底解决Windows 10 PL2303驱动不兼容问题
  • 短信验证码攻击:安全威胁与防护策略
  • 计算机教材内容策划与写作的安全规范
  • C++20编译器实践:用现代特性重写C编译器cci的架构与实现
  • Apollo案例教程:Drupal+MySQL与Spring Boot应用容器化部署详解
  • 数字人不只是用来出镜,企业更该关注这4个真实应用场景
  • 从命令行到可视化:klogg如何彻底改变日志分析工作流
  • 全新升级IM聊天软件上线|企业级即时通讯系统定制部署方案
  • 5分钟实现缠论自动分析:通达信可视化插件实战指南
  • 《派出你的AI同事:WorkBuddy案例实战》000:开篇——从“自己用”到“派出去”
  • OpenDCAI/OpenWorldLib中的推理模块:多模态理解与空间推理的实现指南
  • 审计Excel底稿怎么解析?openpyxl、商业组件与云端渲染的兼容与成本对比
  • 智能宿主机与愚钝沙盒的非对称安全架构实践
  • 如何快速将OneNote笔记迁移到Markdown:终极完整指南
  • Jarvis会话管理教程:使用tmux和fzf实现高效多项目开发
  • 好用的陕西全自动智能压面机哪家好
  • 从COCI竞赛题解析并查集与拓扑排序在混合约束问题中的应用
  • 为什么选择phpcs-security-audit?PHP代码安全审计工具对比与选型指南
  • VC++编程从入门到实践:现代Windows开发环境搭建与核心技能精讲
  • ShaderGraph 4x4矩阵节点:图形学空间变换的核心原理与实战应用
  • Windows下HTTPS资源嗅探工具证书配置实战:从原理到Python requests库应用
  • 探索指南:微信聊天记录导出与年度报告生成的终极数据守护神器
  • Excel复制到吐血?Python一招教你连合并单元格和格式一起带走
  • Hitboxer终极指南:如何用免费开源工具彻底解决游戏方向键冲突
  • C语言在操作系统开发中的核心优势与不可替代性
  • 本地文件智能问答:LangChain+RAG离线落地实战
  • 你的音乐品味如何在Discord上成为社交名片?NetEase-Cloud-Music-DiscordRPC的秘密魔法