python / intermediate
Snippet
Chunk-basierte QuerySet-Verarbeitung mittels Iterator-Blockgröße
Bei der Verarbeitung großer Datenmengen in Django lädt das Auswerten eines QuerySets alle Modellinstanzen in den Speicher. Der Aufruf von iterator(chunk_size=N) streamt Ergebnisse in Blöcken, um die RAM-Auslastung drastisch zu reduzieren.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
from .models import UserProfiledef archive_inactive_profiles(days_threshold=365):inactive_queryset = UserProfile.objects.filter(is_active=False)count = 0for profile in inactive_queryset.iterator(chunk_size=500):profile.archived = Trueprofile.save(update_fields=['archived'])count += 1return count
django
Erklärung
1
inactive_queryset = UserProfile.objects.filter(is_active=False)
Erstellt einen trägen QuerySet-Filter, ohne sofort SQL auf der Datenbank auszuführen.
2
for profile in inactive_queryset.iterator(chunk_size=500):
Ruft Datenbankdatensätze in Blöcken von 500 Zeilen ab, um hohen RAM-Speicherverbrauch zu vermeiden.
3
profile.save(update_fields=['archived'])
Speichert Modelländerungen ab und aktualisiert explizit nur angegebene Felder, um den Schreibaufwand zu minimieren.