Как стремиться присоединиться к дальнейшим таблицам после присоединения к коллекции - PullRequest
1 голос
/ 01 ноября 2019

Мне нужно делать энергичные объединения таблиц после того, как они активно объединяют автоматически сгенерированные отношения из automap.

Я работаю с базой данных с множеством отношений «многие ко многим» и хочу сделать большие объединения, чтобы получитьмного информации аккуратно с их помощью.

До сих пор я использовал объединенную нагрузку для автоматически сгенерированных коллекций, которая работала нормально. Проблема возникает, когда я хочу с нетерпением присоединиться к другим таблицам.

Это не будет проблемой перед закрытием / фиксацией сеанса (с помощью отложенных объединений), но я хочу, чтобы вся информация запрашивалась в одном запросе.

Я попытался создать минимальный пример, описывающий то, что я хочу сделать. Есть родительский класс с отношением многие ко многим к классу Child. (Это отношение создается automap как child_collection)

query = session.query(Parent)
query = query.options(joinedload(Parent.Child_collection))

Третья таблица, School, имеет отношение многие-к-одному с классом Child. Вот как я думаю, что это должно быть сделано:

query = query.options(joinedload(Parent.Child_collection.School)

Но это дает:

Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Parent.Child_collection has an attribute 'School'

Я хочу иметь возможность сделать следующее после присоединения:

for Child in Parent.Child_collection :
    print (Child.School.name)

Единственное альтернативное решение, которое я нашел, - это запрос по всем таблицам, но тогда я получу одну запись на каждого ребенка, а не одну на одного родителя.

Любая помощь / вклад очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...