其他分享
首页 > 其他分享> > FastAPI(34)- Dependencies with yield 依赖项中使用 yield

FastAPI(34)- Dependencies with yield 依赖项中使用 yield

作者:互联网

背景

 

版本要求

pip install async-exit-stack async-generator

 

注意

确保依赖项中只使用一次 yield

 

模拟操作数据库的栗子

Python 操作数据库的大致流程

  1. 连接数据库,创建数据库连接对象
  2. 通过数据库连接对象完成数据库的增删改查
  3. 关闭数据库连接对象

Python 操作 Mysql 教程

 

实际项目中操作数据库

 

操作数据库的依赖项

async def get_db():
    # 1、创建数据库连接对象
    db = DBSession()
    try:
        # 2、返回数据库连接对象,注入到路径操作装饰器 / 路径操作函数 / 其他依赖项
        yield db

  # 响应传递后执行 yield 后面的代码
    finally: # 确保后面的代码一定会执行

        # 3、用完之后再关闭
        db.close()

 

yield 在数据库场景的作用

 

使用 try 的好处

 

使用 finally 的好处

无论是否有异常,都会执行 finally 里面的代码,保证能关闭数据库连接对象

 

包含 yield 和 HTTPException 的依赖项

先来看代码

async def test_error(name: str):
    try:
        # 返回 name
        yield name
    finally:
        # finally 抛出异常
        raise HTTPException(status_code=400, detail="姓名错误")


@app.get("/items")
async def read_items(name: str = Depends(test_error)):
    return {"name": name}

  

请求结果

finally 虽然抛出了异常,但客户端接收到的响应仍然是 200

 

重点

 

标签:项中,name,对象,FastAPI,数据库,yield,finally,连接
来源: https://www.cnblogs.com/poloyy/p/15334617.html