惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
The Cloudflare Blog
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
Jina AI
Jina AI
V
V2EX
罗磊的独立博客
V
Visual Studio Blog
A
About on SuperTechFans
IT之家
IT之家
P
Proofpoint News Feed
B
Blog
博客园 - Franky
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog

博客园 - 全栈测试笔记

博文阅读密码验证 - 博客园 FastAPI系列(24):ORM操作之删除接口开发 单例模式管理模型客户端的几种实现方式 博文阅读密码验证 - 博客园 FastAPI系列(23):ORM操作之编辑接口开发 FastAPI系列(21):ORM之多对多添加记录 CC Switch配置模型 Claude Code安装 FastAPI系列(20):ORM添加表记录 FastAPI系列(19):ORM响应页面数据 博文阅读密码验证 - 博客园 FastAPI系列(18):ORM查询操作 FastAPI系列(17):ORM的迁移命令 FastAPI系列(16):ORM创建模型类 FastAPI系列(15):Jinja2模板语法之控制结构 FastAPI系列(14):Jinja2模板语法之过滤器 FastAPI系列(13):Jinja2模板介绍、模板语法之变量渲染 FastAPI系列(12):响应模型参数 【汇总】FastAPI系列教程
FastAPI系列(22):ORM之多对多查询记录
全栈测试笔记 · 2026-02-07 · via 博客园 - 全栈测试笔记

本系列汇总,请查看这里https://www.cnblogs.com/uncleyong/p/19503695

main.py

import uvicorn
from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise

from test_orm.api.student import student_api
from test_orm.settings import TORTOISE_ORM

app = FastAPI()

app.include_router(student_api, prefix="/student", tags=["学生接口"])

# register_tortoise是注册函数,fastapi一旦运行,register_tortoise已经执行,通过传递进去的app对象,监听服务启动和终止事件
register_tortoise(
    app=app,
    config=TORTOISE_ORM,
)

if __name__ == '__main__':
    uvicorn.run('main:app', host='127.0.0.1', port=8001, reload=True, workers=1)  

一对多查询

from typing import List
from fastapi import APIRouter
from pydantic import BaseModel, field_validator
from test_orm.models import Student, Course

student_api = APIRouter()

@student_api.get("/")
async def getAllStudent():
    # 一对多查询:返回单个对象
    stu = await Student.get(name="王二康")
    print(stu.name)  # 学生信息
    print(stu.sno)
    clas = await stu.clas.values("name")
    print(clas, type(clas))  # 班级信息

    # 一对多查询:返回多个对象
    students = await Student.all().values("name", "clas__name")  # student的name字段,外键clas对应的clas表的name字段
    print(students, type(students))

    return students

响应结果

image

image

多对多查询

from typing import List
from fastapi import APIRouter
from pydantic import BaseModel, field_validator
from test_orm.models import Student, Course

student_api = APIRouter()


@student_api.get("/")
async def getAllStudent():
    # 一对多查询:返回单个对象
    stu = await Student.get(name="王二康")
    print(stu.name)  # 学生信息
    print(stu.sno)
    clas = await stu.clas.values("name")
    print(clas, type(clas))  # 班级信息

    # 一对多查询:返回多个对象
    # students = await Student.all().values("name", "clas__name")  # student的name字段,外键clas对应的clas表的name字段
    # print(students, type(students))

    # 多对多查询:某个学生的课程信息
    print(await stu.courses.all())
    print(await stu.courses.all().values("name", "teacher__name"))  # course的name,外键teacher对应的teacher表的name字段

    # 多对多查询:所有学生的课程、班级信息
    students = await Student.all().values("name", "clas__name",
                                          "courses__name")  # student的name字段,外键clas对应的clas表的name字段,courses对应的student_course表的name字段
    print(students, type(students))
    return students

响应结果

image

image

多表关联查询

from typing import List

from fastapi import APIRouter
from pydantic import BaseModel, field_validator

from test_orm.models import Student, Course

student_api = APIRouter()


@student_api.get("/")
async def getAllStudent():
    # 一对多查询:返回单个对象
    stu = await Student.get(name="王二康")
    print(stu.name)  # 学生信息
    print(stu.sno)
    clas = await stu.clas.values("name")
    print(clas, type(clas))  # 班级信息

    # 一对多查询:返回多个对象
    # students = await Student.all().values("name", "clas__name")  # student的name字段,外键clas对应的clas表的name字段
    # print(students, type(students))

    # 多对多查询:某个学生的课程信息
    print(await stu.courses.all())
    print(await stu.courses.all().values("name", "teacher__name"))  # course的name,外键teacher对应的teacher表的name字段

    # 多对多查询:所有学生的课程、班级信息
    # students = await Student.all().values("name", "clas__name",
    #                                       "courses__name")  # student的name字段,外键clas对应的clas表的name字段,courses对应的student_course表的name字段
    # print(students, type(students))

    # 多对多查询:获取学生姓名、班级名称、课程名称以及对应的讲师名称
    students = await Student.all().values("name", "clas__name", "courses__name", "courses__teacher__name")
    print(students, type(students))
    return students

响应结果

image

image