FastAPI系列-12-ORM介绍
本文介绍了ORM(对象关系映射)在Python与MySQL之间的作用,对比了aiomysql原生SQL路径和SQLAlchemy异步ORM路径。ORM核心在于将数据库表映射为Python类,自动完成SQL生成、参数绑定和结果转换,从而减少样板代码、统一防注入参数化,并通过会话集中管理对象状态与事务。原生路径需手动控制连接、游标和结果字典构造,适合需要精细控制执行计划的复杂场景;ORM路径通过查询表...
发现更多有趣的博主。
43 篇订阅本文介绍了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` ...
本文记录了入职第一天的经历:未现场签实习协议、显示器连接问题;第二天发现公司缺乏文档,任务不明确,需用Python改写Java代码,工作流程混乱。通勤耗时50分钟,整体体验略显困惑。
FastAPI通过路径模板匹配、类型推断和显式标记三层规则决定参数来源:路径中的变量归为`Path`,标量类型默认为`Query`,Pydantic模型则推断为`Body`。使用`Annotated`可将类型与约束统一声明,提升可读性。无论数据来自何处,所有参数最终都汇入同一套类型转换与校验流水线,校验失败会立即返回422响应。参数的分类与Handler采用`async def`还是`def`形态...
随着接口数量增长,所有端点集中在一个文件会导致代码导航困难和文档混乱。FastAPI 提供 `APIRouter` 作为“迷你应用”,可按业务域独立管理端点,并通过 `prefix` 统一路径前缀、`tags` 进行 OpenAPI 文档分组,最后像拼乐高一样挂载到主应用上。 路由注册时,端点被拷贝进应用路由表。请求处理时,框架根据处理函数的形态自动分流:`async def` 函数留在事件循环内...