sqlalchemy/sql:跨模型关系,从“表亲”模型获取信息

2024-05-14 01:04:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些我需要从我的数据模型,但我不知道我需要做什么还没有。我需要一些意见来帮我想清楚。你知道吗

首先是一般情况。我有四个模型A,B,C,D。A和其余的有一对多的关系(A可以有任意数量的B,C,D)。B、 C,D有一对多(B可以有任意数量的C,等等)。这允许构造各种层次结构,例如,一个A实例可以有任意数量的B,每个B有任意数量的C,每个C有任意数量的D,或者一个A实例可以只由任意数量的D元素构造,而不需要中间的B或C

使用具体的术语,我有调查,可以有节,字段和元素。测量可以由具有各自字段的部分构成,每个字段具有多个元素,或者简单地由一组元素构成一个测量,或者由多个元素字段构成一个测量。你知道吗

所以,我的主要问题是,当有任意数量的中间B或C时,如何为a列出D。如何通过中间模型访问?我需要得到D元素,即使关系不是直接的。答。理学学士在sqlalchemy中,默认情况下是无效的(我可以确定),所以我需要设置“something”来实现这一点,但我不知道这个“something”是什么。你知道吗

编辑:

我可以做一个列表

[x.Ds for x in A.Cs]

这是一个开始,但是个案。我想把它设置成返回Ds,不管中间的关系如何。你知道吗

我在每个模型中建立了一个方法,我可以在需要的时候把D元素传给a,所以我现在已经解决了,但不是最优的解决方案。你知道吗


Tags: 实例模型元素数量层次结构sqlalchemy关系ds
1条回答
网友
1楼 · 发布于 2024-05-14 01:04:35

不是通过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()

仅包含元素的调查的Ds:

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

在这些查询中,a_idb_idc_id是将模型链接在一起的外键的名称。而some_a_id只是你感兴趣的调查的id。你知道吗

如果您想独立于是否存在中间模型而了解A的所有Ds,您可以将三个列表附加在一起:

所有Ds

ds = ds1 + ds2 + ds3

相关问题 更多 >