FastAPI 依赖项(yield):如何手动调用它们?

2023-12-20

FastAPI 使用 Depends() 注入返回或产生的变量。例如,快速API/SQL https://fastapi.tiangolo.com/tutorial/sql-databases/?h=sqlalchemy#main-fastapi-app:

# Dependency
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
...
def create_user(db: Session = Depends(get_db)):
...

如果我想用它get_db()在其他地方(FastAPI 路由之外),我该怎么做?我知道这是Python的核心知识,但我似乎无法弄清楚。我最初的想法是db = yield from get_db(),但我不能打电话yield from在异步函数中(并且不知道它是否还能工作)。然后我尝试:

with get_db() as db:
   pass

与原始版本一样失败get_db()没有被包装为@contextmanager。 (注意,我不想装饰这个 - 我正在使用get_db例如,我需要处理更复杂的依赖关系)。最后,我尝试了db = next(get_db())- 这可行,但我认为这不是正确的解决方案。何时/如何finally被调用 - 当我的方法返回时?在其他一些依赖项中,有需要执行的生成后代码;我需要打电话吗next()再次确保代码执行?似乎next()这不是正确的方法。有任何想法吗?


您可以使用contextmanager不是作为装饰器,而是作为返回上下文管理器的函数:

from contextlib import contextmanager

# Dependency
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


# synchronously
with contextmanager(get_db)() as session:  # execute until yield. Session is yielded value
    pass
# execute finally on exit from with

但请记住,代码将同步执行。如果你想在线程中执行它,那么你可以使用FastAPI工具:

import asyncio
from contextlib import contextmanager

from fastapi.concurrency import contextmanager_in_threadpool


async def some_coro():
    async with contextmanager_in_threadpool(contextmanager(get_db)()) as session:
        pass
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastAPI 依赖项(yield):如何手动调用它们? 的相关文章

  • Python 中的字节数组

    如何在 Python 中表示字节数组 如 Java 中的 byte 我需要用 gevent 通过网络发送它 byte key 0x13 0x00 0x00 0x00 0x08 0x00 在Python 3中 我们使用bytes对象 也称为s
  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 如何使用 paramiko 查看(日志)文件传输进度?

    我正在使用 Paramiko 的 SFTPClient 在主机之间传输文件 我希望我的脚本打印文件传输进度 类似于使用 scp 看到的输出 scp my file user host user host password my file 1
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • 解析根元素内元素之间的 XML 文本

    我正在尝试用 Python 解析 XML 以下是 XML 结构的示例 a aaaa1 b bbbb b aaaa2 a
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010

随机推荐

  • Flutter:关于数据更改的 Firebase 推送通知

    收到评论后 我已将以下代码部署到我的 firebase 项目中 并且已成功部署 但没有向我发送任何通知 请在此处查看我的 Firebase 实时数据库屏幕截图 以便更好地理解 现已解决 它将仅向一个 ID 即我的管理设备 发送通知 工作代码
  • 将弱学习器组合成强分类器

    如何将少数弱学习器组合成一个强分类器 我知道公式 但问题是 在我读过的每一篇关于 AdaBoost 的论文中 只有公式 没有任何示例 我的意思是 我的学习器和权重都很弱 所以我可以按照公式告诉我的去做 将学习器乘以它的权重 然后加上另一个乘
  • 具有命令绑定的多个参数

    我有一个带有命令绑定并使用 Prism 库的文本块 这是 XAML 部分
  • 关于C# Expression.MakeBinary(),如何使用

    About Expression MakeBinary BinaryExpression MakeBinary ExpressionType binaryType Expression left Expression right bool
  • 如何在SQL SERVER中使用sqb文件恢复数据库

    我有一个带有 sqb 扩展名的文件 例如 clark sqb 我应该如何使用 sqb 文件恢复数据库 谢谢 SQB 文件是使用 RedGate 的 SQL 备份工具创建的 他们提供了一个名为的命令行工具sqb2mtf可用于转换为本机 SQL
  • Java 8 接口中静态方法的用途是什么?

    为什么 Java 8 支持静态方法 下面代码中 main 方法中的两行有什么区别 package sample public class A public static void doSomething System out println
  • 无法加载文件或程序集“Microsoft.Practices.Unity”

    我正在尝试升级Unity版本 2 1 505 2 但是当我运行该应用程序时 我得到以下信息FileLoadException 无法加载文件或程序集 Microsoft Practices Unity 版本 2 0 414 0 文化 中性 P
  • 如何批量限制事件?

    如何批量限制事件 比方说 我想在用户输入时触发文件保存 但执行文件系统访问的频率不超过每 100 毫秒一次 块事件处理程序示例 on
  • 通过使用 mmap() 在进程之间共享内存

    我使用的是Linux 2 6 我有一个环境 其中两个进程通过消息传递模式的简单实现来模拟 使用共享内存 数据交换 我有一个客户端进程 从父进程 即服务器 分叉 它将结构 消息 写入创建的内存映射区域 在分叉之后 message m mmap
  • 枚举的扩展方法,而不是枚举的实例

    我对我的事物有一个枚举 如下所示 public enum Things OneThing AnotherThing 我想为这个枚举编写一个扩展方法 类似于普莱斯的回答在这里 https stackoverflow com questions
  • 使用 liquibase 更新表中的一行

    我希望有人可以验证这是否是正确的语法以及使用 liquibase 填充数据库的正确方法 我想要的只是更改表中一行的值 我这样做是这样的
  • 如何在 Xcode 中编写涵盖 Facebook 登录的 UI 测试?

    我想在 Xcode 中编写一个 UI 测试 涵盖登录FBDSKLoginKit https cocoapods org pods FBSDKLoginKit 然而 Facebook iOS SDK 使用SFSafariViewControl
  • Heroku 在构建过程中找不到 package.json,尽管我有它

    当我将节点应用程序推送到 heroku master 时 我收到此日志 remote Building source remote remote gt App not compatible with buildpack https codo
  • 复选框默认选中=“选中”不起作用?

    复选框默认选中不起作用 我尝试修复它 但我找不到错误在哪里 所以在页面加载时检查 在页面加载后未检查 我试过了 div class onoffswitch style margin 0 auto div
  • Linux系统如何获取内存信息?

    如何在Linux系统上从C 代码中获取总内存 已用内存 可用内存 运行你的程序通过valgrind 对于一个名为foo 例如 valgrind foo 它将在跟踪内存使用情况的工具中运行程序 并在程序终止后打印出该信息 如果你没有valgr
  • Office.js API 是否支持多个范围选择?

    我需要通过 Office js API 同时选择多个范围 就像在 MSWord UI 中按住 CTRL 键并突出显示多个不连续的段落一样 如下面的屏幕截图所示 这种尝试是行不通的 它不是突出显示文档中单词 the 的前两个实例 而是突出显示
  • iOS7 和 Apple Watch

    我有一个最低 iOS 目标为 iOS7 的应用程序 我正在考虑为苹果手表添加一些额外的功能 如果应用程序在 iOS 8 上运行 是否有任何选项可以将 iOS7 维持为最低目标 并且仍然添加对 Apple Watch 的支持 类似于 iOS8
  • Heroku 部署 Gemfile.lock 问题

    我对整个部署的事情还很陌生 当我第一次创建应用程序时 我已经部署过一次它 然后一切似乎都工作正常 我现在对我的应用程序进行了一些更改 我想部署它们并确保它们在生产环境中工作 我添加并提交了最后的更改 并将更改合并到我的主分支中 然后我跑了g
  • Android SDK 需要 Android Developer Toolkit 版本 17.0.0 或更高版本

    当我尝试将我的项目从 eclipse 合并到 netbeans 时 我遇到了这个奇怪的问题 现在 当尝试重新运行 eclipse 时 我收到此错误 Android SDK 需要 Android 开发者工具包版本 17 0 0 或 多于 我尝
  • FastAPI 依赖项(yield):如何手动调用它们?

    FastAPI 使用 Depends 注入返回或产生的变量 例如 快速API SQL https fastapi tiangolo com tutorial sql databases h sqlalchemy main fastapi a