FastAPI系列-15-路由匹配中使用ORM
本文将路由层的占位端点改造为基于异步SQLAlchemy ORM的真实MySQL查询。核心机制是通过`Depends(get_async_db)`按请求作用域注入`AsyncSession`,路由处理函数只需`await db.execute(select(Book))`即可完成查询,结果通过`scalars()`映射为ORM实例并序列化输出。整个过程严格遵循一次请求一个Session、业务代码不...
发现更多有趣的博主。
43 篇订阅本文将路由层的占位端点改造为基于异步SQLAlchemy ORM的真实MySQL查询。核心机制是通过`Depends(get_async_db)`按请求作用域注入`AsyncSession`,路由处理函数只需`await db.execute(select(Book))`即可完成查询,结果通过`scalars()`映射为ORM实例并序列化输出。整个过程严格遵循一次请求一个Session、业务代码不...
本文介绍了在 SQLAlchemy 2.x 中通过声明式基类 `DeclarativeBase`、`Mapped` 类型注解和 `mapped_column` 将 Python 类映射为 MySQL 表的核心做法。`ForeignKey` 在数据库层建立外键约束,`relationship` 则提供 ORM 层的对象导航,二者职责不同但协同工作。建表时需在启动流程中导入模型包以注册元数据,再通过 ...
本文介绍了在FastAPI异步环境中搭建SQLAlchemy ORM基础的四件套:应用级单例Engine(通过`create_async_engine`管理aiomysql连接池)、`async_sessionmaker`工厂(按请求创建独立`AsyncSession`)、声明式基类`Base`(统一注册模型元数据)以及`yield`依赖函数`get_async_db`(请求始建会话,响应后自动关...
本文介绍了ORM(对象关系映射)在Python与MySQL之间的作用,对比了aiomysql原生SQL路径和SQLAlchemy异步ORM路径。ORM核心在于将数据库表映射为Python类,自动完成SQL生成、参数绑定和结果转换,从而减少样板代码、统一防注入参数化,并通过会话集中管理对象状态与事务。原生路径需手动控制连接、游标和结果字典构造,适合需要精细控制执行计划的复杂场景;ORM路径通过查询表...
中间件与依赖注入的核心区别在于触发时机和可见范围:中间件作用于整个ASGI调用栈,在路由匹配前即执行,覆盖所有请求(包括404和异常),适合协议级的全站横切需求(如访问日志、CORS、请求ID);依赖注入仅在路由匹配成功后解析,仅对特定端点生效,适合业务级复用(如分页、当前用户、数据库会话)。选型遵循三条原则:协议级需求走中间件,业务级需求走依赖,跨层数据通过`request.scope`传递以保...
FastAPI 通过依赖注入实现上下文解析与业务逻辑的解耦。处理函数在签名中用 `Depends` 声明“需要什么”,框架启动时构建依赖图,请求时按拓扑序解析并注入结果,无需关心资源构造细节。`yield` 依赖形态将资源生命周期分为两段:`yield` 之前准备资源并注入,响应返回后自动执行 `yield` 之后的清理逻辑,框架借助 `AsyncExitStack` 保证即使处理函数异常也能完成...
FastAPI 中间件遵循 ASGI 洋葱模型,请求按注册顺序先穿过所有中间件再进入路由,响应逆序返回。`@app.middleware("http")` 支持 `async def` 和 `def` 两种形态:`async def` 在事件循环内 `await call_next`,适合需读请求体或异步 I/O;`def` 被 Starlette 投递至线程池执行,适合纯计算,如生成请求 ID。...
FastAPI 通过全局异常处理机制分离异常抛出与响应构造,避免每个路由处理器重复编写 try/except。异常沿异步栈冒泡,框架根据方法解析顺序匹配最具体的处理器,支持装饰器或字典两种注册方式,最终合并到同一个分派链。处理器函数可以是 `def` 或 `async def`,框架自动调度。核心实践是将 `HTTPException` 及其它业务异常直接抛出,在全局处理器中统一转换为一致的 JS...
FastAPI 默认的 JSON 响应能满足多数场景,但在需要固定响应外壳或提升序列化吞吐时,可直接返回 `JSONResponse` 或更快的 `ORJSONResponse`。显式使用响应类会绕过 `response_model` 的校验与过滤,开发者需自行确保数据安全。响应类的选择(标准库编码 vs. `orjson` 编码)与 handler 的函数形态(`async def` 取决于 I...
FastAPI 通过 Pydantic 模型分别为请求与响应定义独立的契约,不共用同一套模型。请求模型(如 BookCreate)只包含客户端可写字段,过滤掉 id 等由服务端生成的属性;响应模型(如 BookOut)只暴露可读字段,防止数据库内部列外泄。框架内部有两条独立管线:请求体先经请求模型校验,通过后进入 handler;handler 返回的数据再经由 `response_model` ...