Я пытаюсь улучшить производительность некоторых запросов, но сгенерированный запрос не выглядит так, как я ожидаю.
Результаты извлекаются с использованием:
query = session.query(SomeModel).
options(joinedload_all('foo.bar')).
options(joinedload_all('foo.baz')).
options(joinedload('quux.other'))
ЧтоЯ хочу сделать, это фильтр на таблице, присоединенной через 'first', но этот способ не работает:
query = query.filter(FooModel.address == '1.2.3.4')
Это приводит к такому предложению, прикрепленному к запросу:
WHERE foos.address = '1.2.3.4'
Который не выполняет фильтрацию должным образом, так как сгенерированные объединения присоединяют таблицы foos_1
и foos_2
.Если я попытаюсь выполнить этот запрос вручную, но изменим условие фильтрации на:
WHERE foos_1.address = '1.2.3.4' AND foos_2.address = '1.2.3.4'
Он работает нормально.Вопрос, конечно, в том, как этого добиться с помощью самой sqlalchemy?