Мне нужно делать энергичные объединения таблиц после того, как они активно объединяют автоматически сгенерированные отношения из 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)
Единственное альтернативное решение, которое я нашел, - это запрос по всем таблицам, но тогда я получу одну запись на каждого ребенка, а не одну на одного родителя.
Любая помощь / вклад очень ценится.