summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2017-08-22 20:26:07 +0500
committerTim Graham <timograham@gmail.com>2017-08-22 11:26:07 -0400
commit4dfd6b88d520b43b6363946e5ee58ba14cd1efe6 (patch)
tree755e7d12c43e1108a0bdf7ef3dff8cbb1d6f45ac
parent254fb8d1a4e0525d890a5363a5c08f00bc873f03 (diff)
Refs #28459 -- Improved performance of FlatValuesListIterable.
-rw-r--r--django/db/models/query.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 0f55268b18..2a53fa3e89 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -8,6 +8,7 @@ import sys
import warnings
from collections import OrderedDict, deque
from contextlib import suppress
+from itertools import chain
from django.conf import settings
from django.core import exceptions
@@ -145,8 +146,7 @@ class FlatValuesListIterable(BaseIterable):
def __iter__(self):
queryset = self.queryset
compiler = queryset.query.get_compiler(queryset.db)
- for row in compiler.results_iter():
- yield row[0]
+ return chain.from_iterable(compiler.results_iter())
class QuerySet:
@@ -302,6 +302,9 @@ class QuerySet:
# METHODS THAT DO DATABASE QUERIES #
####################################
+ def _iterator(self, use_chunked_fetch, chunk_size):
+ yield from self._iterable_class(self, chunked_fetch=use_chunked_fetch, chunk_size=chunk_size)
+
def iterator(self, chunk_size=2000):
"""
An iterator over the results from applying this QuerySet to the
@@ -310,7 +313,7 @@ class QuerySet:
if chunk_size <= 0:
raise ValueError('Chunk size must be strictly positive.')
use_chunked_fetch = not connections[self.db].settings_dict.get('DISABLE_SERVER_SIDE_CURSORS')
- return iter(self._iterable_class(self, chunked_fetch=use_chunked_fetch, chunk_size=chunk_size))
+ return self._iterator(use_chunked_fetch, chunk_size)
def aggregate(self, *args, **kwargs):
"""