python / intermediate
Snippet
Effiziente Verarbeitung von Listen-Datensätzen mit Django ORM bulk_create und Batching
Das einzelne Einfügen großer Listen von Elementen erzeugt einen erheblichen Datenbank-Overhead. Die Methode bulk_create von Django nimmt eine Liste von Modellinstanzen entgegen und fügt diese mittels gebündelter Multi-Row-INSERT-Abfragen ein.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
from myapp.models import MetricEntrydef insert_metrics_in_batches(metric_values: list[float], batch_size: int = 500):instances = [MetricEntry(value=val) for val in metric_values]created = MetricEntry.objects.bulk_create(instances,batch_size=batch_size,ignore_conflicts=True)return len(created)
django
Erklärung
1
instances = [MetricEntry(value=val) for val in metric_values]
Verwendet eine List Comprehension, um Modellobjekte im Speicher aus einem Eingabearray zu erstellen.
2
created = MetricEntry.objects.bulk_create(
Ruft bulk_create auf dem Modell-Manager auf, um die Liste der Instanzen per Datenbankoperation einzufügen.
3
batch_size=batch_size,
Begrenzt jede generierte INSERT-Abfrage auf eine maximale Anzahl von Datensätzen, um Speicherlimits der Datenbank einzuhalten.