Mise à jour de 'source/part-3-django-concepts/queryset.adoc'
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Fred 2020-12-04 11:28:53 +01:00
parent cd371ceb57
commit 9ef2a9e2b7
1 changed files with 7 additions and 3 deletions

View File

@ -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), 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 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 Comme l'indique la documentation:
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
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] [source,python]
---- ----