2008-11-27 9 views
9

Una de mis llamadas de API puede dar como resultado actualizaciones a una gran cantidad de objetos (modelos de Django). Estoy corriendo en problemas de rendimiento con este ya que estoy actualizando cada artículo individualmente, guardar y pasar a la siguiente:Estrategias para acelerar las operaciones de ORM por lotes en Django

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

veces mi criterio de filtro se parece a "donde x en ('a',' antes de Cristo',...)".

Parece que el official answer to this is "won't fix". Me pregunto qué estrategias usan las personas para mejorar el rendimiento en estos escenarios.

Respuesta

15

El billete se ha vinculado a la creación es mayor - si usted no está confiando en un save método anulado o pre/post guardar señales que hacer trozos de trabajar en guardar, QuerySet has an update method que se puede utilizar para realizar una UPDATE en las filas filtradas:

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

Niza, que parece que va a cubrir una gran cantidad de casos. Le vamos a dar una oportunidad. – Parand

+0

Funcionó muy bien, muchas gracias. – Parand

Cuestiones relacionadas