From 9ef2a9e2b72fa9b42184487a79afd4f7c40f4ef5 Mon Sep 17 00:00:00 2001 From: Fred Date: Fri, 4 Dec 2020 11:28:53 +0100 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'source/part-3-djan?= =?UTF-8?q?go-concepts/queryset.adoc'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/part-3-django-concepts/queryset.adoc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/part-3-django-concepts/queryset.adoc b/source/part-3-django-concepts/queryset.adoc index bbf9730..a603ee2 100644 --- a/source/part-3-django-concepts/queryset.adoc +++ b/source/part-3-django-concepts/queryset.adoc @@ -11,10 +11,14 @@ pour finalement faire une deuxième requête et récupérer les relations extern Au final, si votre premier queryset est relativement grand (nous parlons de 1000 à 2000 éléments, en fonction du moteur de base de données), la seconde requête va planter et vous obtiendrez une exception de type `django.db.utils.OperationalError: too many SQL variables`. -La solution consiste à passer par un itérateur: +Nous pourrions penser qu'utiliser un itérateur permettrait de combiner les deux, mais ce n'est pas le cas... -1. Le queryset peut-être construit comme d'habitude -2. Nous implémentons un itérateur sur les résultats du queryset, pour nous conformer aux limites du moteur de base de données +Comme l'indique la documentation: + + Note that if you use iterator() to run the query, prefetch_related() calls will be ignored since these two optimizations do not make sense together. + +Ajouter un itérateur va en fait forcer le code à parcourir chaque élément de la liste, pour l'évaluer. +Il y aura donc (à nouveau) autant de requêtes qu'il y a d'éléments, ce que nous cherchons à éviter. [source,python] ----