2017-01-31 2 views
1

Я ищу способ ссылки на объединенный стол внутри фильтра. Мой запрос:sqlalchemy join as new_name filter new_name.column == значение

session.query(A).outerjoin(B, C, D).filter(B.column_b == 1, C.column_c == 2) 

Как я могу сделать такую ​​фильтрацию без обозначения модели B и C?

session.query(A).outerjoin(B, C, D).filter_by(column_b=1, column_c=2) 

не работает, потому что filter_by пытается найти «column_b» и «» column_c в D. псевдонимом() и псевдоним() тоже не работают.
Я получаю dict of field_to_value в форме {"column_a": 0, "column_b": 1, "column_c": 2} И мне нужно создать запрос из него. Конечно, у меня могло бы быть картирование, например, {"column_a": A.column_b, "column_b": B.column_b, "column_c": C.column_c}. Но должен быть лучший способ.

Есть ли хороший способ сделать такую ​​фильтрацию?

ответ

0

filter_by применяется при последнем соединении, чтобы вы могли разбить свои внешние соединения. Попытка:

session.query(A).outerjoin(B).filter_by(column_b == 1) 
       .outerjoin(C).filter_by(column_c == 2) 
       .outerjoin(D) 
+0

Большое спасибо за ответ. Но этот подход все еще подразумевает, что я знаю имя столбца модели. Я уточнил вопрос, чтобы уточнить, чего я хочу достичь. – simpleranchero