FastAPI(35)- 依赖项中使用 yield + Context Manager 上下文管理器

简介: FastAPI(35)- 依赖项中使用 yield + Context Manager 上下文管理器

什么是 Context Manager


上下文管理器

在 Python 中,是可以在 with 语句中使用的任何 Python 对象,比如通过 with 来读取文件

with open("./somefile.txt") as f:

   contents = f.read()

   print(contents)

  • 通过 open("./somefile.txt") 创建的对象就称为上下文管理器
  • 当 with 代码块执行完后,它可以确保关闭文件,即使有异常也是如此
  • 上下文管理器详细教程

 

依赖项中使用 yield

当使用 yield 创建依赖项时,FastAPI 会在内部将其转换为上下文管理器,并将其与其他一些相关工具结合起来

 

在依赖项中使用上下文管理器与 yield


# 自定义上下文管理器
class MySuperContextManager:
    def __init__(self):
        self.db = DBSession()
    def __enter__(self):
        return self.db
    def __exit__(self, exc_type, exc_value, traceback):
        self.db.close()
async def get_db():
    with MySuperContextManager() as db:
        yield db


等价的普通写法

async def get_db():
    # 1、创建数据库连接对象
    db = DBSession()
    try:
        # 2、返回数据库连接对象,注入到路径操作装饰器 / 路径操作函数 / 其他依赖项
        yield db
  # 响应传递后执行 yield 后面的代码
    finally: # 确保后面的代码一定会执行
        # 3、用完之后再关闭
        db.close()
相关文章
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
关系型数据库 MySQL 数据库连接
FastAPI(34)- Dependencies with yield 依赖项中使用 yield
FastAPI(34)- Dependencies with yield 依赖项中使用 yield
246 0
FastAPI(34)- Dependencies with yield 依赖项中使用 yield
FastAPI(33)- Global Dependencies 全局依赖
FastAPI(33)- Global Dependencies 全局依赖
347 0
FastAPI(33)- Global Dependencies 全局依赖
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
166 0
FastAPI(32)- Dependencies in path operation 通过路径操作装饰器的 dependencies 参数声明依赖
|
缓存 API
FastAPI(31)- Sub-dependencies 子依赖
FastAPI(31)- Sub-dependencies 子依赖
140 0
FastAPI(31)- Sub-dependencies 子依赖
FastAPI 学习之路(二十六)全局依赖项
FastAPI 学习之路(二十六)全局依赖项
FastAPI 学习之路(二十六)全局依赖项
|
测试技术
FastAPI 学习之路(二十五)路径操作装饰器依赖项
FastAPI 学习之路(二十五)路径操作装饰器依赖项
FastAPI 学习之路(二十五)路径操作装饰器依赖项
|
缓存
FastAPI 学习之路(二十四)子依赖项
FastAPI 学习之路(二十四)子依赖项
FastAPI 学习之路(二十四)子依赖项
|
Python
FastAPI 学习之路(二十三)用类作为依赖的注入
FastAPI 学习之路(二十三)用类作为依赖的注入
FastAPI 学习之路(二十三)用类作为依赖的注入
|
监控 安全 NoSQL
FastAPI 学习之路(二十二)依赖项
FastAPI 学习之路(二十二)依赖项
FastAPI 学习之路(二十二)依赖项