iterator()
Evaluates the QuerySet
(by performing the query) and returns an iterator (see PEP 234) over the results. A QuerySet
typically caches its results internally so that repeated evaluations do not result in additional queries. In contrast, iterator()
will read results directly, without doing any caching at the QuerySet
level (internally, the default iterator calls iterator()
and caches the return value). For a QuerySet
which returns a large number of objects that you only need to access once, this can result in better performance and a significant reduction in memory.
Note that using iterator()
on a QuerySet
which has already been evaluated will force it to evaluate again, repeating the query.
Also, use of iterator()
causes previous prefetch_related()
calls to be ignored since these two optimizations do not make sense together.
Warning
Some Python database drivers like psycopg2
perform caching if using client side cursors (instantiated with connection.cursor()
and what Django’s ORM uses). Using iterator()
does not affect caching at the database driver level. To disable this caching, look at server side cursors.
Please login to continue.