You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在FastAPI中创建数据库连接时为何需使用生成器?

关于FastAPI中get_db生成器的疑问解答

为什么要用生成器实现get_db?

  • 自动管理会话生命周期:当FastAPI通过Depends调用这个生成器时,会在请求开始时执行到yield db,把数据库会话交给请求处理逻辑;不管请求是正常完成还是抛出异常,finally块里的db.close()都会自动执行,彻底避免了手动关闭会话可能遗漏导致的连接泄漏问题。
  • 适配依赖注入的隔离需求:生成器每次被Depends调用时,都会创建一个全新的SessionLocal实例,确保每个请求都有独立的数据库会话,不会出现多个请求共用会话导致的数据混乱或并发问题。

测试时next(get_db())和直接SessionLocal()的区别?

  • 直接调用SessionLocal()确实能拿到可用的数据库实例,但你必须手动调用db.close()来释放连接。如果测试用例多或者忘记关闭,很容易耗尽数据库连接池,导致后续测试失败。
  • 使用next(get_db())时,生成器的finally块会在生成器对象被垃圾回收时自动执行db.close(),相当于帮你自动处理了连接释放。而且这种方式和生产环境中依赖注入的逻辑完全一致,能让测试更贴近实际运行场景,减少环境差异带来的问题。

内容的提问来源于stack exchange,提问作者Antonio Gamiz Delgado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:49:56