Joins und Lazy- gegenüber Eager-Loading
Vermeiden Sie N+1-Abfragen beim Durchlaufen von Beziehungen.
Joins und Lazy- gegenüber Eager-Loading ist eine kostenlose Flask Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Flask Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Flask Academy-Kurs umfasst insgesamt 4 Lektionen.
Über mehrere Tabellen abfragen
Manchmal filtern Sie übergeordnete Datensätze anhand der Daten ihrer untergeordneten Datensätze. Mit einem Join kann eine Abfrage gleichzeitig zwei verwandte Tabellen umfassen. 🔀
Einen Join schreiben
Rufen Sie join() für eine Abfrage auf, um ein verwandtes Modell einzubeziehen, und filtern Sie anschließend beide Seiten als Teil einer gemeinsamen Abfrage.
q = User.query.join(Post).filter(Post.title == "Hi")Die verknüpfte Tabelle filtern
Nach einem Join können Sie Bedingungen für das andere Modell verwenden und übergeordnete Datensätze anhand des Inhalts ihrer untergeordneten Datensätze finden.
active = User.query.join(Post).filter(Post.public).all()Lazy Loading ist der Standard
Beziehungen werden standardmäßig lazy geladen: Die untergeordneten Datensätze werden erst in dem Moment geladen, in dem Sie tatsächlich auf das Attribut zugreifen.
user = User.query.first()
user.postsDas N+1-Problem
Wenn Sie über übergeordnete Datensätze iterieren und untergeordnete Datensätze lazy laden, wird für jeden übergeordneten Datensatz eine Abfrage ausgeführt. Dieses N+1-Muster beeinträchtigt die Leistung unbemerkt erheblich. 😬
for u in User.query.all():
print(len(u.posts))Eager Loading behebt das Problem
Eager Loading ruft die verknüpften Zeilen im Voraus ab, sodass der gesamte Objektgraph mit nur einer oder zwei Abfragen geladen wird.
joinedload mit einer Abfrage
Verwenden Sie joinedload, um übergeordnete und untergeordnete Datensätze gemeinsam mit einem einzigen SQL-Join abzurufen.
from sqlalchemy.orm import joinedload
User.query.options(joinedload(User.posts)).all()selectinload für Sammlungen
selectinload lädt untergeordnete Datensätze in einer zweiten gebündelten Abfrage. Das skaliert bei Eins-zu-viele-Listen häufig besser.
from sqlalchemy.orm import selectinload
User.query.options(selectinload(User.posts)).all()Die Strategie im Modell festlegen
Sie können mit der Option lazy der Beziehung auch einen Standard festlegen, etwa select, joined oder selectin.
posts = db.relationship("Post", lazy="selectin")Join lädt nicht per Eager Loading
Ein einfacher Join filtert über mehrere Tabellen, lädt die Beziehung aber nicht vorab. Dafür müssen Sie weiterhin eine Eager-Loading-Option hinzufügen.
Die Ladestrategie bewusst wählen
Lazy Loading ist für eine einzelne Zeile in Ordnung. Verwenden Sie jedoch Eager Loading, sobald Sie über viele übergeordnete Datensätze iterieren und deren untergeordnete Datensätze lesen.
Schnelltest
Sie iterieren über 100 Benutzer und lesen die Beiträge jedes Benutzers. Welches Problem kann Lazy Loading verursachen?
Zusammenfassung: Joins und Laden
Sie können jetzt Tabellen verbinden, N+1 erkennen und das Problem mit joinedload oder selectinload beheben. Effiziente relationale Abfragen, geschafft! 🏁
Lerne Python mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „Joins und Lazy- gegenüber Eager-Loading“ kostenlos?
Ja — der vollständige Text von „Joins und Lazy- gegenüber Eager-Loading“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Flask Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Flask Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Joins und Lazy- gegenüber Eager-Loading“?
Vermeiden Sie N+1-Abfragen beim Durchlaufen von Beziehungen. Du übst Flask Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Flask Academy zu starten?
Keine Vorkenntnisse erforderlich. Flask Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Joins und Lazy- gegenüber Eager-Loading“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Flask Academy-Lektion Code schreiben und ausführen?
Ja. Jede Flask Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Zeilen mit query und get abrufen
- Ergebnisse filtern, sortieren und begrenzen
- Beziehungen und Foreign Keys definieren
- Joins und Lazy- gegenüber Eager-Loading