当前位置: 首页 > 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.jsqmd.com/news/1407117/

相关文章:

  • 北京包包回收2026市场两极分化:顶奢坚挺轻奢波动,你的包在哪一档 - 好物循环记
  • SNMP Trap实战:从原理到Python实现精准告警
  • 基于ReAct与本地LLM的AI编程助手:从理论到实战搭建
  • OpenClaw:大模型应用的服务编排与执行框架架构解析与实践
  • Leveraging Language Models for Interpretable Analysis of Narratives in a Large Corpus
  • 开源机械爪教学套件OpenClaw:基于Arduino的STEM实践项目设计
  • 基于大模型的PLC编程自动化:从自然语言到工业控制代码的智能生成
  • Git多身份管理:为不同仓库单独配置用户信息的三种方法
  • 云服务器安全加固:从SSH端口更换到OpenClaw部署的完整指南
  • 无线传输模块概述
  • AI智能体在油气田物联网的应用:从数据感知到自主决策的工程实践
  • OSI七层与TCP/IP五层模型:场景化记忆心法与实战解析
  • OpenClaw服务保活实战:Heartbeat心跳与Cron定时任务配置指南
  • 2026年国内空压机维修厂家推荐 信誉靠谱之选参考 - 产品推荐官
  • 苏州地区GEO优化靠谱品牌选择的实用参考方向 - 招财兔数字员工
  • 镇江市GEO优化优质服务商助力企业本地线索转化 - 招财兔数字员工
  • Linux终端输出记录全攻略:重定向、tee、script与组合技巧
  • 八月做题
  • 汇编语言:直接向显存写数据
  • Maxwell-Pro 自动化测试系统 - 完整架构设计与实现
  • 基于OpenClaw与Star Office UI构建AI智能体像素风可视化工作看板
  • RK3568之SPI子系统(协议)
  • 林高参营销策划**介绍:大健康品类实战营销全案服务商与**对接指南 - 优质品牌中立测评推荐
  • P14364 [CSP-S 2025] 员工招聘
  • Windows 10磁盘分区实战:安全从C盘划分D盘,实现系统与数据分离
  • 2026年国内耐用PVC车丝割缝管厂家推荐及选购指南 - 产品推荐官
  • Windows 11文件后缀名修改全攻略:从显示到批量修改与安全关联
  • C++的学习第三部分
  • DrawingBench: Evaluating Spatial Reasoning and UI Interaction Capabilities of Large Language Mode...
  • OpenSSH 7.4到8.9p1安全升级:编译安装与生产环境平滑迁移指南