Junções e carregamento tardio versus antecipado
Evite consultas N+1 ao percorrer relações.
Junções e carregamento tardio versus antecipado é uma aula grátis de Flask Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Flask Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Flask Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Querying Across Tables
Sometimes you filter parents by their children's data. A join lets one query span two related tables at once. 🔀
Write a join
Call join() on a query to pull a related model in, then filter on either side as one combined query.
q = User.query.join(Post).filter(Post.title == "Hi")Filter on the Joined Table
After a join, conditions on the other model are fair game, so you find parents by what their children contain.
active = User.query.join(Post).filter(Post.public).all()Lazy Loading Is Default
By default relationships are lazy: the children load only the moment you actually touch that attribute.
user = User.query.first()
user.postsThe N+1 Problem
Looping over parents and reading children lazily fires one query per parent. This N+1 pattern quietly kills performance. 😬
for u in User.query.all():
print(len(u.posts))Eager Loading Fixes It
Eager loading grabs the related rows up front, so the whole graph loads in just a query or two.
joinedload in One Query
Use joinedload to fetch parents and children together with a single SQL join.
from sqlalchemy.orm import joinedload
User.query.options(joinedload(User.posts)).all()selectinload for Collections
selectinload loads children in a second batched query, which often scales better for one-to-many lists.
from sqlalchemy.orm import selectinload
User.query.options(selectinload(User.posts)).all()Set Strategy on the Model
You can also pick a default with the relationship's lazy option, like select, joined, or selectin.
posts = db.relationship("Post", lazy="selectin")Join Does Not Eager Load
A plain join filters across tables but does not preload the relationship. For that you still add an eager option.
Choose Loading on Purpose
Lazy is fine for one row; reach for eager loading whenever you loop over many parents and read their children.
Quick Check
You loop over 100 users and read each user's posts. What problem can lazy loading cause?
Recap: Joins and Loading
You can now join tables, spot N+1, and fix it with joinedload or selectinload. Efficient relational reads, done! 🏁
Perguntas Frequentes
A aula “Junções e carregamento tardio versus antecipado” é grátis?
Sim — o texto completo de “Junções e carregamento tardio versus antecipado” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Flask Academy, atualize para CoddyKit PRO. O curso de Flask Academy inclui 4 aulas no total.
O que vou aprender em “Junções e carregamento tardio versus antecipado”?
Evite consultas N+1 ao percorrer relações. Você pratica Flask Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Flask Academy?
Nenhuma experiência prévia é necessária. Flask Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Junções e carregamento tardio versus antecipado”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Flask Academy?
Sim. Cada aula de Flask Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Busque linhas com query e get
- Filtre, ordene e limite resultados
- Defina relações e chaves estrangeiras
- Junções e carregamento tardio versus antecipado