使用 sqlmodel 在 fastapi 中深度嵌套响应模型

2023-12-23

我想在这里重复一下之前的内容question https://stackoverflow.com/questions/74719687/getting-joined-tables-from-sqlmodel-as-a-nested-responde-model-in-fastapi?noredirect=1#comment131876394_74719687。但现在我有3个表之间的关系。我相信在这里查看实体关系图可以更好地理解底层数据库的结构。

The schemas.py将这张图片关联到代码中,其中Host与 具有一对多关系Binary反过来又与Map_Products_All.

from typing import Optional
from sqlmodel import SQLModel,Field,Relationship


# Binary Data Model

class BinaryBase(SQLModel):
    software_install_path: Optional[str] = None


class Binary(BinaryBase,table=True):
    id: Optional[int] = Field(default=None,primary_key=True)
    host_id: int = Field(foreign_key="host.id",nullable=False)
    host: "Host" = Relationship(back_populates="binaries")
    product_id: int = Field(foreign_key="map_products_all.id",nullable=False)
    product: "Map_Products_All" = Relationship(back_populates="bins")


# HOST Data model

class HostBase(SQLModel):
    name: str 
    region: Optional[str] = None
    os_version: Optional[str] = None
    network: Optional[int] = None
    

class Host(HostBase,table=True):
    id: Optional[int] = Field(default=None,primary_key=True)
    binaries: list[Binary] = Relationship(back_populates='host')



class HostReadWithBinary(HostBase):
    binaries: list[BinaryBase] = []

class BinaryReadWithHost(BinaryBase):
    host: HostBase



# Mapping Data Model

class MapBase(SQLModel):
    eim_product_id: Optional[int] = None
    vendor: Optional[str] = None
    name: Optional[str] = None
    eim_name: Optional[str] = None
    manufacturer: Optional[str] = None


class Map_Products_All(MapBase,table=True):
    id: Optional[int] = Field(default=None,primary_key=True)
    bins: list[Binary] = Relationship(back_populates="product")
    lev: Optional[int] = None

The main.py路由器函数调用是这样的:

from schemas import HostBase,Host,BinaryBase,Binary,HostReadWithBinary,BinaryReadWithHost,MapBase,Map_Products_All,EimBase,Eim,EimMap,RemediationInput,Remediation
from fastapi import FastAPI,Depends,HTTPException
from sqlmodel import SQLModel,Session,select,col

    def get_session():
        with Session(engine) as session:
            try:
                yield session
            finally:
                session.close()

app = FastAPI()

@app.on_event("startup")
def on_startup():
    SQLModel.metadata.create_all(engine)


@app.get(
    "/binaries/",
    response_model=list[HostReadWithBinary]
)
def get_binary(name: Optional[str] = None,session: Session = Depends(get_session)) -> list[Host]:  
    query = select(Host).limit(100)
    if name:
        query = query.where(col(Host.name).contains(name.lower()))
    
    return session.exec(query).all()

上面的代码有效,我得到这样的响应:

    [
      {
        "name": "hkg3pl0479",
        "region": "HK",
        "os_version": "Red Hat 6.10",
        "network": 3,
        "binaries": [
          {
            "software_install_path": "/opt/appd/machineagent",
            "product_id": 21
          }
        ]
      },
...

然而,由于这个回应有一个product_id,以及Binary表通过以下方式链接Map_Products_All通过此属性和关系模型的表:

product_id: int = Field(foreign_key="map_products_all.id",nullable=False)
product: "Map_Products_All" = Relationship(back_populates="bins")

我想从以下位置获取信息MapBase进入上面的响应模型。我对如何实现这一点有点困惑,因为它涉及连接 3 个表。


None

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

使用 sqlmodel 在 fastapi 中深度嵌套响应模型 的相关文章

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 处理 Python 行为测试框架中的异常

    我一直在考虑从鼻子转向行为测试 摩卡 柴等已经宠坏了我 到目前为止一切都很好 但除了以下之外 我似乎无法找出任何测试异常的方法 then It throws a KeyError exception def step impl contex
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 如何使用 Pandas、Numpy 加速 Python 中的嵌套 for 循环逻辑?

    我想检查一下表的字段是否TestProject包含了Client端传入的参数 嵌套for循环很丑陋 有什么高效简单的方法来实现吗 非常感谢您的任何建议 def test parameter a list parameter b list g
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • 停止 CherryPy 中的请求处理并从工具返回 200 响应

    我的问题 我正在寻找一种方法来停止工具中的请求处理而不引发异常 换句话说 我想在请求到达指定的控制器之前停止请求并返回 2xx 状态代码 背景 我们希望我们的应用程序支持 CORS 以及预检请求 这个想法是编写一个工具来挂钩before h
  • FacebookSDK 呈现登录 UI 两次

    将 iOS 6 与 FacebookSDK 结合使用会将读取和发布权限的请求拆分为两个单独的调用 我不确定为什么这样做有任何好处 但它似乎需要在第一次时向用户展示 Facebook UI 两次 在我的应用程序中 在用户选择使用 Facebo
  • Silverlight 的拖放控件

    最近 我需要向 Silverlight 应用程序添加拖放功能 谁能推荐一个好的拖放控件 我创建了一个拖 放控制器 我认为效果非常好 我已经使用这种技术有一段时间了 我对此非常满意 http houseofbilz com archive 2
  • 匿名函数中的 rlang::sym

    我最近注意到rlang sym似乎不适用于匿名函数 我不明白为什么 这是一个例子 它非常笨拙和丑陋 但我认为它说明了这一点 require tidyverse data lt tibble x1 letters 1 3 x2 letters
  • 这是在 Bootstrap 中将单选按钮设置为“选中”的正确方法吗?

    我正在重新利用 TIMEX 已标记为重复的问题 因为我相信它不是重复的 而且我遇到了同样的问题 如何在 Bootstrap 中将单选按钮设置为 选中 https stackoverflow com questions 24463822 ho
  • 在 Outlook VBA 中,如何更改主题以便它更改资源管理器窗格中的主题?

    当我收到电子邮件时 我会修改主题行 使其更具可读性 并且由某个自动电子邮件程序生成的 对话 实际上包含所有主题 我可以更改电子邮件视图窗格中的主题 但资源管理器窗格中的主题保持不变 如何强制更改资源管理器窗格中的主题 我必须复制电子邮件并删
  • 将 RDF .ttl 文件合并到一个文件数据库中 - 过滤并仅保留所需的数据/三元组

    我需要将 1000 多个 ttl 文件合并到一个文件数据库中 如何通过过滤源文件中的数据来合并它们 并仅保留目标文件中所需的数据 Thanks 有很多选项 但最简单的方法可能是使用 Turtle 解析器读取所有文件 并让该解析器将其输出传递
  • 无法使用 rdd.toDF() 但spark.createDataFrame(rdd) 有效[重复]

    这个问题在这里已经有答案了 我有一个以下形式的 RDDRDD string List Tuple 如下所示 u C1589 HG02922 83779208 2 677873089 0 当尝试运行以下代码将其转换为数据帧时 spark cr
  • 如何将图标和输入文本放在同一行?

    我想在左侧放置一个图标 在右侧放置一个输入类型文本 占据所有剩余空间 ico input type text 如果我将两者都设置为display inline block并设置输入的宽度为100 it 越线 因为10
  • 与其他类似类相比,HandlerThread 的最佳使用

    我试图了解使用的最佳用例HandlerThread 根据定义 用于启动具有循环器的新线程的便捷类 然后可以使用循环器创建处理程序类 请注意 仍然必须调用 start 我可能是错的 但我可以通过使用来实现类似的功能Thread Looper
  • `document` 未定义 Electron

    我正在尝试使用以下方法从文件中读取 JSONfs模块 并将其显示在div带身份证list在电子应用程序中 我的代码在index js看起来像这样 dialog showOpenDialog filenames gt if filenames
  • 如何从另一个目录获取 ruby​​ 文件

    我试图要求一个我在另一个文件中创建的 rake 文件 这两个文件位于两个不同的目录中 我在第一个文件的顶部有 require 在 require 之后的引号内有第二个文件的名称 它告诉我它无法加载此类文件 这是否意味着因为它位于不同的目录中
  • Pandas 从同一数据框中减去 2 行

    如何在以下数据帧 df 中从另一行中减去一行 RECL LCC 1 2 3 RECL LCC 35 107655 36 015210 28 877135 RECL PI 36 961519 43 499506 19 538975 我想做类似
  • Django FormView 和分页

    如果表单有效 我正在使用 django 的 FormView 返回对象集 我的视图函数是这样的 class IdeaView FormView template name contributor browse photo html def
  • 无法启动应用程序(CreateProcess 错误=87),无法使用缩短类路径解决方法

    当我在 Windows 上的 Eclipse 中启动应用程序时 我收到以下错误 执行命令行时发生异常 无法运行程序 CreateProcess error 87 参数不正确 我过去通过缩短 CLASSPATH 解决了这个问题 我现在已经到了
  • 如何维护 Web 应用程序中的状态 - 因为 HTTP 是无状态的

    我是构建 Web 应用程序的新手 刚刚开始学习和设置 Grails 我计划构建一个具有 4 到 5 页流程的应用程序 由于HTTP是无状态协议 那么通常页面之间的状态是如何维护的 我很好奇这里接受的标准是什么 我应该创建会话范围的对象并在页
  • 与 ASP.NET MVC 2 中的 SelectList 作斗争

    我有一个看起来像这样的模型 public class SampleModel public static SampleModel Create return new SampleModel Boolean true set several
  • 如何从命令行打开 SourceTree?

    有没有一种快速简单的方法可以从命令行打开 SourceTree 中的 git 存储库 我从终端做了很多 git 工作 但有时没有什么可以替代良好的历史视图 差异 希望能够在不使用书签的情况下打开 安装 SourceTree 命令行工具将为您
  • 如何从完成块中检索返回值?

    是否可以在主线程上运行完成块 例如 我有一个返回值的方法 int test here one method is called with completion block with return type void obj somemeth
  • 使用 sqlmodel 在 fastapi 中深度嵌套响应模型

    我想在这里重复一下之前的内容question https stackoverflow com questions 74719687 getting joined tables from sqlmodel as a nested respon