尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

day01-FastAPI初识(补充day0.5)以及Tortoise-ORM
📅 发布时间:2026/7/20 11:49:32

# 路径参数与查询参数:

1.路径参数(Path Parameters):

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

  • /items/1:1是路径参数item_id的值
  • /users/100:100是路径参数user_id的值

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

2.查询参数(Query Parameters):

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

  • /items?skip=0&limit=10:skip(跳过条数)、limit(查询条数)是查询参数
  • /users?name=张三&age=20:name(姓名)、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接口文档页面手动调试后端所有接口,确保单后端功能正常

相关新闻

  • 计算机教材内容策划与写作的安全规范
  • C++20编译器实践:用现代特性重写C编译器cci的架构与实现
  • 短信验证码攻击:安全威胁与防护策略

最新新闻

  • 金华管道疏通选哪家 2026金华全域正规疏通商家TOP5综合测评榜单 - 北京金修达天津维修部
  • [具身智能-589]:RS485 / I2C / SPI / CAN 总线完整选型对比
  • C2000 Bootloader与ePWM配置全解析:从引导表构建到精准PWM输出
  • 深度学习实时学习技术解析与实践指南
  • 2026年显卡市场前瞻与性价比选购指南
  • 2026 年现阶段,青阳优秀的摄影培训学校供应商哪家靠谱,别再盲目学了,这才是摄影师的真相 - 行业推荐官【官方】

日新闻

  • Python开发内部工具:7大核心库实战解析
  • 合肥雷达官方2026年7月最新信息:客户服务网点地址与售后热线权威公示 - 亨得利官方服务中心
  • PCA实战指南:从变量纠缠诊断到主成分业务解读

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号