python / intermediate
Snippet
Stückeln großer Datenbankergebnisse mit QuerySet.iterator()
Die Verwendung von `iterator()` wertet ein QuerySet aus, indem Ergebnisse in Blöcken aus der Datenbank gestreamt werden, wodurch das Laden riesiger Datensätze in den Arbeitsspeicher vermieden wird.
snippet.py
python
1
2
3
4
5
6
from myapp.models import AuditLogdef process_audit_logs():large_dataset = AuditLog.objects.filter(processed=False).iterator(chunk_size=1000)for log_entry in large_dataset:log_entry.mark_as_processed()
django
Erklärung
1
from myapp.models import AuditLog
Importiert die Modellklasse AuditLog.
2
def process_audit_logs():
Definiert eine Funktion zur iterativen Verarbeitung nicht verarbeiteter Datensätze.
3
large_dataset = AuditLog.objects.filter(processed=False).iterator(chunk_size=1000)
Ruft Datensätze mithilfe serverseitiger Datenbank-Cursor in 1000er-Blöcken ab.
4
for log_entry in large_dataset:
Iteriert über jeden einzelnen Protokolleintrag, während dieser im Speicher gestreamt wird.
5
log_entry.mark_as_processed()
Ruft eine Domänenmethode für jede Log-Modellinstanz auf.