python - select_related - Estrategias para acelerar las operaciones de ORM por lotes en Django
select_related django example (2)
El ticket al que vinculó es para la creación masiva: si no se basa en un método de save
anulado o señales de guardado pre / post para realizar tareas de guardado, QuerySet
tiene un método de update
que puede usar para realizar una UPDATE
en el filas filtradas:
Something.objects.filter(x__in=[''a'', ''b'', ''c'']).update(a=''something'')
Una de mis llamadas a la API puede dar como resultado actualizaciones a una gran cantidad de objetos (modelos de Django). Me encuentro con problemas de rendimiento con esto ya que estoy actualizando cada elemento de forma individual, guardando y pasando al siguiente:
for item in Something.objects.filter(x=''y''):
item.a="something"
item.save()
Algunas veces mi criterio de filtro se ve como "donde x en (''a'', ''b'', ''c'', ...)".
Parece que la respuesta oficial a esto es "no arreglará" . Me pregunto qué estrategias usan las personas para mejorar el rendimiento en estos escenarios.
Necesita usar transacciones o crear la instrucción SQL a mano. También puede intentar usar SQLAlchemy, que es compatible con algunas características de ORM geniales, como la Unidad de trabajo (o la transacción de la aplicación).
Transacciones de Django: http://docs.djangoproject.com/en/dev/topics/db/transactions/?from=olddocs
SQLAlchemy: http://www.sqlalchemy.org/