python / intermediate
Snippet
Speicher-effiziente Queryset-Verarbeitung durch QuerySet-Iterator-Chunking
Beim Umgang mit Hunderttausenden von Django-ORM-Datensätzen speichert die Auswertung eines Standard-QuerySets jede Modellinstanz im Python-Arbeitsspeicher. Die Methode iterator() mit einer festgelegten chunk_size liest Datenbankergebnisse in überschaubaren Stapeln ein, was den RAM-Verbrauch bei großen Datenverarbeitungsaufgaben minimal hält.
snippet.py
python
1
2
3
4
5
6
from myapp.models import AuditLogdef process_large_audit_logs():logs = AuditLog.objects.filter(processed=False)for log in logs.iterator(chunk_size=1000):log.mark_as_processed()
django
Erklärung
1
logs = AuditLog.objects.filter(processed=False)
Erstellt ein noch nicht ausgewertetes QuerySet für ungeprüfte Audit-Log-Einträge.
2
for log in logs.iterator(chunk_size=1000):
Ruft Datensätze in Datenbank-Stapeln von 1.000 ab, ohne das gesamte QuerySet im Arbeitsspeicher zu cachen.
3
log.mark_as_processed()
Führt die Verarbeitungslogik für jede einzelne Modellinstanz aus.