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

FastApi进阶

中间件

中间件是一个再每次请求进入fastapi时都会执行的函数,他在请求到达实际路径操作之前执行,并且再相应返回客户端之前再运行一次,执行顺序按代码顺序自底向上执行

具体使用

@app.middleare("http") async def middleare(request,call_next): print("中间件开始处理 -- start") response = await call_next(request) print("中间件处理完成 -- end") return response

依赖注入系统

可以用来共用通用逻辑,减少代码重复,具体场景如下

使用步骤

1.创建依赖项

async def common_paremeters( skip: int = Query(0,ge=0), limit: int = Query(10,le=60) ): return { "skip":skip, "limit":limit }

2.导入Depends

from fastapi import Depends

3.声名依赖项

@app.get("news/news_list") async def get_news_list( commons = Depends(common_parameters) ): return commons

ORM简介

ORM是一种操作数据库的编程技术,用于再面向对象编程语言和关系数据库之间建立映射

使用流程

使用ORM

创建异步数据库引擎

from sqlalchemy.ext.asyncio import create_async_engine # 异步MySQL连接地址(驱动为aiomysql) ASYNC_DATABASE_URL = "mysql+aiomysql://root:123456@localhost:3306/lol?charset=utf8" # 创建异步数据库引擎 async_engine = create_async_engine( ASYNC_DATABASE_URL, echo=True, # 可选:打印执行的原生SQL日志,开发调试开启,生产关闭 pool_size=10, # 连接池常驻持久连接数量 max_overflow=20 # 连接池额外临时扩容最大连接数 )

定义模型类

包含

1.基类 -- 包含通用属性字段的映射

class Base(DeclarativeBase): create_time: Mapped[datetime] = mapped_column( Datetime, insert_default=func.now(),default=datetime.now,comment="创建时间") update_time: Mapped[datetime] = mapped_column( Datetime, insert_default=func.now(),default=datetime.now,comment="修改时间")

2.定义数据表对应的模型类

class Book(Base): __tablename__="book" id:Mapped[int] = mapped_column(primary_key=True) bookname:Mapped[str] = mapped_column(String(255)) author:Mapped[str] = mapped_column(String(255))

3.创建数据库表

async def create_tables(): async with async_engine.begin() as conn: await conn.run_sync(Base.matadata.create_all) @app.on_event("startup") async def startup_event(): await create_tables()

路由匹配中使用ORM

核心:创建依赖项,使用Depends注入处理函数

AsyncSessionLocal = async_sessionmaker( bind=async_engine,#绑定数据引擎 class_=AsyncSession,#制定会话类 expire_on_commit=False#会话对象不过期,不重新查询数据库 ) async def get_db(): async with AsyncSessionLocal() as session: try: yield session await session.commit() except Exception as e: await session.rollback() raise e finally: await session.close()

使用依赖

@app.get("/book/news_list") async def get_book(db: AsyncSession = Depends(get_db)): result = await db.execute(select(Book)) return result.scalars().all()

数据库操作

查询

核心语句

await db.execute(select(模型类))#返回一个ORM对象 #获取所有数据 scalars().all() #获取单条数据 scalars().first() get(模型类,主键值)

条件查询

@app.get("/book/list", response_model=list[BookSchema]) async def get_book_list( author: str = Query(None, description="Filter by author"), bookname: str = Query(None, description="Filter by bookname"), db: AsyncSession = Depends(get_db) ): query = select(Book) if author: query = query.where(Book.author.like(f"%{author}%")) if bookname: query = query.where(Book.bookname.like(f"%{bookname}%")) result = await db.execute(query) return result.scalars().all()
http://www.cnnetsun.cn/news/4057204.html

相关文章:

  • 一文速通GPU版FFmpeg视频转码的安装使用
  • 传统BIOS引导黑苹果实战:老硬件安装macOS Monterey完整指南
  • 基于大模型的PLC编程自动化:从自然语言到工业控制代码的智能生成
  • 无线传输模块概述
  • Python 快速上手(Java 开发者版)
  • 碰到文档色差别发愁,AI 导出鸭帮你搞定 DeepSeek 导出 pdf 颜色不一样怎么办的实操解决技巧
  • Gitee实战指南:从Git基础到团队协作的完整工作流
  • 微信聊天记录导出工具WeChatMsg:免费开源,永久保存你的每一句对话
  • AI如何重塑经济模式:从传统支柱解构到新价值创造
  • Unity-2D-Destruction 完全指南:免费开源 2D 精灵破碎工具,5 分钟实现爆炸破坏效果
  • 2024黑苹果安装指南:从硬件选型到OpenCore配置实战
  • Linux文件IO编程指南:系统IO与标准IO的核心区别与实战应用
  • 海纳斯新机开荒指南:系统设置调优、应用安装与卸载全攻略
  • 腾讯云部署OpenClaw对接钉钉机器人:AI智能体自动化办公实战
  • Linux内存优化实战:从free命令解读到性能调优全解析
  • TG地理围栏实战:构建毫秒级响应的实时位置监控系统
  • OpenClaw智能体框架实战:从零搭建AI自动化工作流
  • fflip 升级迁移指南:特性开关从 v2 到 v4 平滑升级避坑全攻略
  • 项目沟通管理:从理论到实践,打造高效团队协作的通信协议
  • git-sync 系统服务配置:使用 systemd 实现无人值守的定时备份
  • AudioBand常见问题排查清单:10个高频错误与解决方案
  • 打造类似Apple Music的动画效果:kavsoft-swiftui-animations中的音乐应用案例
  • 覆盖12+编程语言:palenight.vim 多语言语法高亮适配详解
  • PyQt-Frameless-Window 常见问题排查清单:从 DLL 加载失败到毛玻璃卡顿
  • MXFP8量化原理揭秘:NVIDIA-Nemotron-3.5-Lightning-30B-A3B-mxfp8如何把31B模型压缩到30GB
  • 深度解析North-Micro-Vision-Instruct-mxfp8架构:Cohere Compass的混合注意力与DeepStack视觉编码器
  • dsh-web-ui 安全使用指南:配对门、隧道与 SSH 的 6 条安全建议
  • ClimaX Docker部署实战:一条命令启动完整气象模型环境
  • QQ空间历史说说如何完整备份?GetQzonehistory三步导出教程
  • Python进阶 - os模块 遍历目录下的所有文件