gpt4 book ai didi

python - sqlalchemy/sql : cross model relationships, 从 'cousin' 模型获取信息

转载 作者:太空宇宙 更新时间:2023-11-03 19:12:38 27 4
gpt4 key购买 nike

我的数据模型中有一些我需要的东西,但我不确定我需要做什么。我需要一些意见来帮助我思考这个问题。

首先是一般情况。我有四个模型 A、B、C、D。A 与其余模型之间存在一对多关系(A 可以有任意数量的 B、C、D)。 B、C、D 每个后续都有一对多(B 可以有任意数量的 C 等)。这允许构建各种层次结构,例如。 G。 A 实例可以有任意数量的 B,每个 B 可以有任意数量的 C,每个 B 可以有任意数量的 D,或者 A 实例可以仅由任意数量的 D 元素构成,没有中间的 B 或 C。

使用具体术语,我的调查可以包含部分、字段和元素。调查可能由各个部分组成,每个部分都有自己的字段,每个字段都有许多元素,或者只是一个包含一堆元素的调查或一个包含多个元素字段的调查。

所以,我的主要问题是,当存在任意数量的干预 B 或 C 时,如何为 A 列出 D。如何通过干预模型进行访问?即使关系不直接,我也需要获取 D 元素。默认情况下,A.Bs.Cs.Ds 在 sqlalchemy 中不是有效的东西(我可以确定),所以我需要设置“某些东西”来执行此操作,但我目前不知道这个“某些东西”是什么.

编辑:

我可以进行列表理解

[x.Ds for x in A.Cs]

这是一个开始,但要具体情况而定。我想将其设置为在 A 上返回 D,无论中间关系如何。

我在每个模型中构建了一个方法,可以在需要时将 D 元素传递给 A,所以我现在已经解决了它,但这不是最佳解决方案。

最佳答案

不要通过 python 关联获取 Ds 对象,而是要求 SQLAlchemy 在数据库中查询这些对象。

如果您在 D 模型中有 3 个外键(分别指向 C、B 和 A)——这就是我从您的帖子中推断出来的——,那么您只需使用连接即可获取与 A 相关的 D 对象:

包含部分、字段和元素的调查的 Ds:

ds1 = session.query(D).join(C, D.c_id == C.id).join(B, C.b_id == B.id).join(A, B.a_id == A.id).filter(A.id = some_a_id).all()

包含字段和元素的调查的 Ds:

ds2 = session.query(D).join(C, D.c_id == C.id).join(A, C.a_id == A.id).filter(A.id = some_a_id).all()

仅包含元素的调查的要点:

ds3 = session.query(D).join(A).filter(A.id = some_a_id).all()

在这些查询中,a_idb_idc_id 是将模型链接在一起的外键的名称。 some_a_id 只是您感兴趣的调查的 ID。

如果您想了解 A 的所有 D,无论是否存在中间模型,您只需将三个列表附加在一起即可:

所有 D

ds = ds1 + ds2 + ds3

关于python - sqlalchemy/sql : cross model relationships, 从 'cousin' 模型获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12477437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com