【发布时间】:2019-10-29 12:50:55
【问题描述】:
我正在尝试进行优化的 SQL 查询,以检索对象列表 A 具有对象列表 B 具有对象列表 C 和 D 以及与 E 的多对多关系
我尝试使用聚合行来解决问题,但是当没有 B、C 或 D 类型的对象时我遇到了问题。
例如我试过这个查询:
aa = A.alias()
query = (A.select(A, B, aa, C, D, E).join(B, peewee.JOIN_LEFT_OUTER).join(aa, peewee.JOIN_LEFT_OUTER).switch(B).join(C, peewee.JOIN_LEFT_OUTER).switch(B).join(D, peewee.JOIN.LEFT_OUTER).switch(B).join(E, peewee.JOIN_LEFT_OUTER))
然后,我使用 aggregate_rows 删除重复数据。它在有 B、C 和 D 行时有效,但当没有时,我没有得到相应的 A 对象,其中 B 或 C 或 D 为空列表。
我也尝试过使用预取,但是当我访问时,A.B peewee 不运行查询(好),但是,当我访问 A.B.C peewee 时运行查询(坏)。
A_objects = peewee.prefetch(A,B,C,D,E)
我迷路了,我不知道自己做错了什么。
【问题讨论】: