Je veux prendre le dernier 10 instances d'un modèle et d'avoir ce code:
Model.objects.all().order_by('-id')[:10]
Est-il vrai que, premièrement, de ramasser tous les cas, et puis prendre seulement 10 derniers? Est-il une méthode plus efficace?
Je veux prendre le dernier 10 instances d'un modèle et d'avoir ce code:
Model.objects.all().order_by('-id')[:10]
Est-il vrai que, premièrement, de ramasser tous les cas, et puis prendre seulement 10 derniers? Est-il une méthode plus efficace?
Django querysets sont paresseux. Que signifie une requête, le succès à la base de données uniquement lorsque vous demandez spécifiquement pour le résultat.
Donc, jusqu'à ce que vous l'imprimer ou l'utiliser réellement le résultat d'une requête vous pouvez filtrer davantage avec les pas de base de données access.
Comme vous pouvez le voir ci-dessous votre code ne s'exécute une requête sql pour récupérer uniquement les 10 derniers articles.
In [19]: import logging
In [20]: l = logging.getLogger('django.db.backends')
In [21]: l.setLevel(logging.DEBUG)
In [22]: l.addHandler(logging.StreamHandler())
In [23]: User.objects.all().order_by('-id')[:10]
(0.000) SELECT "auth_user"."id", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."password", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."is_superuser", "auth_user"."last_login", "auth_user"."date_joined" FROM "auth_user" ORDER BY "auth_user"."id" DESC LIMIT 10; args=()
Out[23]: [<User: hamdi>]
En fait, je pense que l' LIMIT 10
seraient émises à la base de données afin de découpage n'aura pas lieu en Python, mais dans la base de données.
Voir limitant querysets pour plus d'informations.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.