내가 좋아하는 모델 여섯 개 테이블을 가지고 다음 네 가지가SQLAlchemy - 동적 왼쪽 조인을 쿼리에 추가하는 방법?
과 같을 것이다 쿼리, 예를 들어A
A, B, C
A, D, E
A, B, C, D E
: 내가 좋아하는 것
+--<B>--C
|
A
|
+--<D>--E
동적으로 이러한 옵션 중 하나를 조회 할 수 있도록
q = session.query(A, B, C, D, E) \
.outerjoin(B, A.id == B.a_id).outerjoin(C, C.id == B.c_id)
.outerjoin(D, A.id == D.a_id).outerjoin(E, E.id == D.e_id)
모델을 목록에 추가하고 select
절에서 동적으로 사용할 수 있습니다. 그러나 조인을 동적으로 첨부하는 방법을 알 수 없습니다.
from sqlalchemy import outerjoin
models = [A]
joins = []
if foo:
models.append(B)
models.append(C)
joins.append(outerjoin(A, B, A.id == B.a_id))
joins.append(outerjoin(B, C, C.id == B.c_id))
if bar:
models.append(D)
models.append(E)
joins.append(outerjoin(A, D, A.id == D.d_id))
joins.append(outerjoin(D, E, E.id == D.e_id))
q = session.query(*models)
# How do I attach my joins list to this query?
내가 작동하지 않았다 다음을 시도, 그리고 그것을 한 경우에도 나는 경우가 foo
및 bar
이 때 두 False
빈 FROM
절을 떠날 것이라고 추정 것 : 여기에 지금까지 무엇을 가지고 . 물론
q = q.select_from(*joins)
은 내가 joins
목록을 없애하고 다음과 같이, q = session.query(*models)
를 실행 한 후 if
조건을 반복,하지만 난 오히려 조건부 논리를 한 번 수행 할 수 있습니다.
if foo:
q = q.outerjoin(B, A.id == B.a_id).outerjoin(C, C.id == B.c_id)
if bar:
q = q.outerjoin(D, A.id == D.a_id).outerjoin(E, E.id == D.e_id)