L'interrogation de données avec Django ORM est l'une des fonctionnalités les plus puissantes de Django. QuerySet est l'outil de base pour récupérer efficacement des données d'un modèle Django, et en utilisant cet outil, il est facile de traiter des interrogations de données complexes. Dans cet article, nous allons examiner ce qu'est un QuerySet,
1. Qu'est-ce qu'un QuerySet ?
Un QuerySet est un ensemble d'objets utilisés pour récupérer ou manipuler des données d'une base de données dans Django ORM. En d'autres termes, un QuerySet est un ensemble de résultats d'une requête (Query) exécutée sur la base de données. En utilisant un QuerySet, vous pouvez récupérer, filtrer et manipuler des objets de modèle.
Le QuerySet encapsule l'interaction avec la base de données, permettant aux développeurs de récupérer ou de manipuler des données avec un code Python intuitif sans avoir à écrire SQL directement.

Ce que vous pouvez faire avec un QuerySet
- Récupération de données : vous pouvez récupérer des enregistrements enregistrés dans la base de données avec diverses conditions.
- Filtrage : vous pouvez appliquer plusieurs conditions pour extraire uniquement les données souhaitées.
- Triage et découpage : vous pouvez trier les données dans l'ordre souhaité ou récupérer des données d'une plage spécifique.
2. Types de méthodes d'interrogation de base et exemples d'utilisation
Django ORM propose diverses méthodes d'interrogation de base. Ces méthodes sont très utiles pour récupérer et filtrer des données facilement.
2.1 all()
Cette méthode est utilisée lorsque vous souhaitez récupérer toutes les données d'un modèle.
from myapp.models import Post
posts = Post.objects.all()
Post.objects.all()
récupère tous les objets enregistrés dans le modèle Post.
2.2 filter()
Utilisée lorsque vous souhaitez récupérer uniquement les objets correspondants à des conditions spécifiques.
published_posts = Post.objects.filter(status='published')
filter()
interroge les objets qui correspondent aux conditions, et le résultat est un QuerySet.
2.3 exclude()
Utilisée pour récupérer les objets en excluant certaines conditions.
draft_posts = Post.objects.exclude(status='published')
exclude()
interroge les objets qui ne correspondent pas aux conditions, à l'inverse defilter()
.
2.4 get()
Utilisée pour récupérer un seul objet correspondant à des conditions spécifiques. Notez que si aucun objet ne correspond ou si plus d'un objet correspond, une erreur se produira.
post = Post.objects.get(id=1)
get()
est utilisée pour interroger exactement un seul objet, et si le résultat est nul ou multiple, une exceptionDoesNotExist
ouMultipleObjectsReturned
est levée.
3. Opérateurs et filtrage dans l'ORM
Le QuerySet permet de traiter des conditions de filtrage complexes à l'aide de divers opérateurs. En utilisant ces opérateurs, il est possible de filtrer les données avec des conditions très précises.
3.1 exact
Utilisé pour rechercher des valeurs parfaitement correspondantes.
post = Post.objects.filter(title__exact='Mon premier post')
title__exact
filtre les objets dont le titre est exactement'Mon premier post'
.
3.2 icontains
Utilisé pour rechercher si une sous-chaîne est présente sans tenir compte de la casse.
posts = Post.objects.filter(title__icontains='django')
title__icontains
interroge tous les posts dont le titre contient'django'
.
3.3 gt
, lt
(plus grand, plus petit)
Utilisé pour définir des conditions de plus grand ou plus petit sur des valeurs numériques ou de date.
recent_posts = Post.objects.filter(publish_date__gt='2024-01-01')
publish_date__gt
filtre les posts publiés après le2024-01-01
.gt
signifie greater than, etlt
signifie less than.
Outre cela, divers opérateurs tels que startswith
, endswith
, in
, etc., peuvent être utilisés pour mettre en œuvre des conditions de filtrage variées de manière simple.
4. Références inversées : Interrogation des relations entre modèles connectés par des clés étrangères
Dans Django ORM, la référence inversée est une méthode pour interroger les données à travers la relation entre des modèles connectés par une clé étrangère (Foreign Key). En utilisant la référence inversée, il est facile d'interroger les relations entre parents et enfants dans une base de données relationnelle.
4.1 Référence inversée avec related_name
Lorsque vous définissez une clé étrangère, l'option related_name
vous permet d'utiliser des noms plus lisibles lors de la référence inverse.
Exemple
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
text = models.TextField()
Utilisation
post = Post.objects.get(id=1)
comments = post.comments.all()
- En utilisant
post.comments.all()
, vous pouvez récupérer tous les commentaires associés à cette publication. Sirelated_name
n'est pas défini, le nom par défaut seracomment_set
.
Conclusion
Le QuerySet de Django ORM est un puissant outil pour interagir avec les bases de données, permettant de récupérer et de manipuler des données efficacement grâce à diverses méthodes et opérateurs. Dans cet article, nous avons examiné les notions de base de l'utilisation de QuerySet, ainsi que comment filtrer des données et effectuer des références inversées.
Les parties introduites ci-dessus ne sont qu'une introduction très basique aux fonctionnalités d'interrogation de l'ORM. En réalité, le QuerySet de Django possède encore des méthodes plus variées et puissantes qui peuvent être utilisées en combinaison pour interroger des données. À l'avenir, je prévois de rédiger des articles présentant et analysant chaque méthode de QuerySet.
Dans le prochain article, nous aborderons l'optimisation des performances des QuerySet et le concept de l'évaluation paresseuse (lazy evaluation), afin de découvrir des façons d'accéder aux données pour de meilleures performances. Restez à l'écoute !
Add a New Comment