Esto es de la django docs on the queryset iterator()
method:a utilizar o no iterador() en el ORM de Django
Un QuerySet normalmente almacena sus resultados internamente de modo que las repetidas evaluaciones no se obtienen en consultas adicionales. Por el contrario, el iterador() leerá los resultados directamente, sin hacer ningún almacenamiento en caché en el nivel QuerySet (internamente, el iterador defectuoso llama al iterador() y almacena en caché el valor de retorno). Para un QuerySet que devuelve una gran cantidad de objetos a los que solo necesita acceder una vez, , esto puede dar como resultado un mejor rendimiento y una reducción significativa en la memoria.
Después de leer, todavía estoy confundido: la línea sobre el aumento del rendimiento y la reducción de la memoria sugiere que deberíamos usar el método iterator()
. ¿Alguien puede dar algunos ejemplos de buenos y malos casos iterator()
uso?
Incluso si los resultados de la consulta no están en caché, si realmente deseaban acceder a los modelos más de una vez, ¿alguien no puede hacer lo siguiente?
saved_queries = list(Model.objects.all().iterator())
Creo que es una cuestión de tamaño de modelo ... si es enorme, entonces probablemente no quiere un manojo en la memoria ... –