Join e caricamento lazy o eager
Eviti le query N+1 attraversando le relazioni.
Join e caricamento lazy o eager è una lezione Flask Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Flask Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Flask Academy include 4 lezioni in totale.
Eseguire query tra tabelle
A volte deve filtrare gli elementi padre in base ai dati dei figli. Un join consente a una query di coinvolgere contemporaneamente due tabelle correlate. 🔀
Scriva un join
Chiami join() su una query per includere un modello correlato, quindi applichi filtri a entrambi i lati come parte di un'unica query.
q = User.query.join(Post).filter(Post.title == "Hi")Filtri sulla tabella collegata
Dopo un join, può applicare condizioni sull'altro modello e trovare così gli elementi padre in base al contenuto dei figli.
active = User.query.join(Post).filter(Post.public).all()Il lazy loading è predefinito
Per impostazione predefinita, le relationship sono lazy: i figli vengono caricati solo nel momento in cui accede effettivamente a quell'attributo.
user = User.query.first()
user.postsIl problema N+1
Scorrere gli elementi padre e leggere i figli in modalità lazy esegue una query per ogni elemento padre. Questo schema N+1 riduce silenziosamente le prestazioni. 😬
for u in User.query.all():
print(len(u.posts))L'eager loading risolve il problema
L'eager loading recupera subito le righe correlate, così l'intero grafo viene caricato con una o due query.
joinedload in una query
Usi joinedload per recuperare insieme elementi padre e figli con un singolo join SQL.
from sqlalchemy.orm import joinedload
User.query.options(joinedload(User.posts)).all()selectinload per le collezioni
selectinload carica i figli con una seconda query raggruppata, che spesso offre una scalabilità migliore per le liste uno-a-molti.
from sqlalchemy.orm import selectinload
User.query.options(selectinload(User.posts)).all()Imposti la strategia nel modello
Può anche scegliere un valore predefinito tramite l'opzione lazy della relationship, ad esempio select, joined o selectin.
posts = db.relationship("Post", lazy="selectin")Il join non esegue l'eager loading
Un semplice join applica filtri tra le tabelle, ma non precarica la relationship. Per farlo, deve comunque aggiungere un'opzione eager.
Scelga intenzionalmente la modalità di caricamento
Lazy va bene per una sola riga; scelga l'eager loading quando scorre molti elementi padre e ne legge i figli.
Verifica rapida
Scorre 100 utenti e legge i post di ciascuno. Quale problema può causare il lazy loading?
Riepilogo: join e caricamento
Ora può unire le tabelle, riconoscere il problema N+1 e risolverlo con joinedload o selectinload. Letture relazionali efficienti, fatto! 🏁
Domande Frequenti
La lezione «Join e caricamento lazy o eager» è gratuita?
Sì — il testo completo di «Join e caricamento lazy o eager» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Flask Academy, passa a CoddyKit PRO. Il corso Flask Academy include 4 lezioni in totale.
Cosa imparerò in «Join e caricamento lazy o eager»?
Eviti le query N+1 attraversando le relazioni. Eserciti Flask Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Flask Academy?
Non è richiesta alcuna esperienza precedente. Flask Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Join e caricamento lazy o eager»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Flask Academy?
Sì. Ogni lezione Flask Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Recuperare righe con query e get
- Filtrare, ordinare e limitare i risultati
- Definire relazioni e chiavi esterne
- Join e caricamento lazy o eager