ORM Django
C'est quoi un ORM?
ORM est l'acronyme anglais de object relational mapping, donc mapping d'objet relationnel en français. c’est un outil puissant qui permet de travailler avec des bases de données de manière abstraite, en utilisant Python au lieu de requêtes SQL. De façon plus claire vous ne faites plus de requêtes SQL mais vous travaillez directement avec vos objets.
Les modèles Django sont le cœur de l’ORM. Un model django est une table de donne qui a un nom ,des champs typés et un comportement. Ils représentent les tables de base de données sous forme de classes Python. Chaque classe du modèle correspond à une table de base de données avec des attributs qui représentes les colonnes de la table.
class Article(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
def __str__(self):
self.title
Différentes méthodes dans Django ORM:
1. Opérations CRUD :
a- Créer: Model.objects.create() ou instance.save()
from apps.models import Article
article = Article.objects.create(title="premier article", content="contenu de l'article")
ou
article = Article(title="Deuxième Article", content="Deuxième contenue")
article.save()
b- Lire: Model.objects.all() ou Model.objects.get()
article = Article.objects.all()
for articles in article:
print(articles.title, articles.content)
ou
article = Article.objects.get(id=1)
print(article.title, article.content)
c- Mise à jour: instance.save() ou Model.objects.filter().update()
article = Article.objects.get(id=1)
article.content = ("contenu mise a jour")
ou
Article.objects.filter(id=1).update(title="premier titre mise a jour")
d- Supprimer: instance.delete() ou Model.objects.filter().delete()
article = Article.objects.get(id=1)
article.delete()
ou
Article.objects.filter(title__icontains="Deuxième Article").delete()
2. Filtrage et interrogation:
a- filter(), exclude(), get()
La méthode filter() est utilisée pour récupérer plusieurs objets qui correspondent à un critère ou à plusieurs critères.
article = Article.objects.filter(title="premier article")
article = Article.objects.filter(title__icontains="premier" , content__icontains="content")
La méthode exclude() est utilisée pour récupérer tous les objets qui ne correspondent pas aux critères spécifiés.
article = Article.objects.exclude(title__icontains="article")
for articles in article:
print(article.title, article.content)
articles = Article.objects.exclude(title="Premier Article")
La méthode get() est utilisée pour récupérer un seul objet qui correspond exactement aux critères spécifiés.
article = Article.objects.get(id=1)
print(article.title, article.content)
b- filter(field__lookup=value), exclude(field__lookup=value)
Ces méthodes permettent de filtrer ou d'exclure des objets selon des critères basés sur des champs spécifiques, en utilisant des lookups.
Rechercher les articles dont l'ID est supérieur à 5 :
article = Article.objects.filter(id__gt=5)
Exclure tous les articles dont le titre contient "Article" :
articles = Article.objects.exclude(title__icontains="Article")
c- Q()objets pour requêtes complexes
La classe Q est utilisée pour créer des requêtes complexes qui nécessitent des conditions OU ou ET personnalisées. Vous pouvez les combiner avec & (ET) ou | (OU).
Exemple avec Q :
articles = Article.objects.filter(Q(title__icontains="Premier") |Q(content__icontains="intéressant"))
articles = Article.objects.filter(Q(title__icontains="Premier") & Q(content__icontains="intéressant"))
articles = Article.objects.exclude(Q(title__icontains="Premier") | Q(id__lt=10))
d- annotate(),aggregate()
Ces méthodes sont utilisées pour effectuer des calculs et ajouter des champs calculés
annotate() :
Ajoute un champ calculé à chaque objet d'un QuerySet.
aggregate() :
Effectue des calculs globaux sur tous les objets d'un QuerySet.
from django.db.models import Count
total_articles = Article.objects.aggregate(total=Count("id"))
print(total_articles) # Résultat : {'total': 10}
NB :
Supérieur à ( gt), Inférieur à ( lt), Supérieur ou égal à ( gte), Inférieur ou égal à ( lte) : Comparer des valeurs numériques.