python / intermediate
Snippet
Stapelweise Datensatz-Modifikation mit Django bulk_update für spezifische Felder
Das Aufrufen von .save() in einer Schleife löst für jede einzelne Datenbankzeile eine separate SQL-Abfrage aus, was zu erheblichen Leistungsengpässen führt. bulk_update aktualisiert mehrere Modellinstanzen effizient in einer einzigen SQL-Operation und ermöglicht es Entwicklern, Aktualisierungen strikt auf bestimmte Felder zu beschränken und die Ausführung mit batch_size zu parzellieren.
snippet.py
python
1
2
3
4
5
6
from myapp.models import Productdef discount_products(product_list, discount_rate):for product in product_list:product.price = product.price * (1 - discount_rate)Product.objects.bulk_update(product_list, ['price'], batch_size=500)
django
Erklärung
1
for product in product_list:
Iteriert durch die Sammlung vorhandener Produktmodell-Instanzen im Speicher.
2
product.price = product.price * (1 - discount_rate)
Aktualisiert den Zielattributwert lokal auf jeder Modellinstanz.
3
Product.objects.bulk_update(product_list, ['price'], batch_size=500)
Führt eine optimierte SQL-UPDATE-Anweisung in Stapeln von 500 aus, die nur auf die Spalte 'price' abzielt.