Главный грех бэкендера при работе с ORM - случайно сгенерировать сотни запросов к БД в обычном цикле.
# ❌ ПРОБЛЕМА (1 запрос за постами + N запросов за авторами):
posts = session.query(Post).all()
for post in posts:
print(post.author.name) # Каждая итерация делала отдельный SELECT!
# ✅ РЕШЕНИЕ (1 запрос с JOIN):
from sqlalchemy.orm import joinedload
posts = session.query(Post).options(joinedload(Post.author)).all()
for post in posts:
print(post.author.name) # Данные уже загружены заранее!