2008-11-27 9 views
9

Un de mes appels d'API peut entraîner des mises à jour d'un grand nombre d'objets (modèles Django). Je suis en cours d'exécution dans les problèmes de performance avec ce que je suis mise à jour chaque élément individuellement, d'économie et de passer à la suivante:Stratégies pour accélérer les opérations ORM par lots dans Django

for item in Something.objects.filter(x='y'): 
    item.a="something" 
    item.save() 

Parfois, mon critère de filtrage ressemble « où x dans (« a », » avant JC',...)". Il semble que le official answer to this is "won't fix". Je me demande quelles stratégies les gens utilisent pour améliorer la performance dans ces scénarios.

Répondre

15

Le billet vous lié à est pour la création en vrac - si vous n'êtes pas compter sur une substitution save méthode ou pré/post enregistrer des signaux pour faire des morceaux de travailler à l'enregistrement, QuerySet has an update method que vous pouvez utiliser pour effectuer une UPDATE sur les lignes filtrées:

Something.objects.filter(x__in=['a', 'b', 'c']).update(a='something') 
+0

Nice, qui ressemble à ça va couvrir beaucoup de cas. Je vais essayer. – Parand

+0

A travaillé super, merci beaucoup. – Parand