Django

Développement avec Django : Utilisation de l'ORM vs Utilisation sans ORM

01 juil. 2024

Table des matières:

  1. l’utilisation de Django sans ORM
  2. l’utilisation de Django ORM
  3. CONCLUSION

l’utilisation de Django sans ORM

Sans l’utilisation de l’ORM (Object-Relational Mapping), Django serait une structure de développement web qui nécessiterait l’écriture directe de requêtes SQL pour interagir avec la base de données. Cela signifie que chaque interaction avec la base de données nécessiterait la création manuelle de requêtes SQL, l’exécution de ces requêtes, la gestion des résultats et la transformation des données récupérées en objets Python utilisables dans l’application.

  1. Voici comment Django ressemblerait sans l’utilisation de l’ORM :

Structure de Code

  • Définition des Modèles : Sans ORM, les modèles de données ne seraient pas des classes Python étendant django.db.models.Model. Au lieu de cela, les tables de base de données devraient être créées manuellement avec du SQL pur, et chaque interaction avec ces tables nécessiterait l’utilisation de requêtes SQL directes dans le code.

Exemple de définition de modèle sans ORM :

# Exemple sans ORM Django (utilisant SQL pur)
class Author:
def __init__(self, id, name, email):
self.id = id
self.name = name
self.email = email
 
class Article:
def __init__(self, id, title, content, author_id, published):
self.id = id
self.title = title
self.content = content
self.author_id = author_id
self.published = published
  • Interactions avec la Base de Données :

Sans ORM, chaque opération CRUD (Create, Read, Update, Delete) nécessiterait l’écriture et l’exécution de requêtes SQL directes. Par exemple, pour créer un nouvel article, il faudrait construire et exécuter une requête INSERT SQL, puis gérer manuellement les résultats retournés pour les transformer en objets Python utilisables dans l’application.

Exemple d’interaction avec la base de données sans ORM :

# Exemple sans ORM Django (utilisant SQL pur)
import psycopg2 # Exemple avec PostgreSQL
 
# Connexion à la base de données
conn = psycopg2.connect("dbname=mydatabase user=myuser password=mypassword")
 
# Création d'un nouvel article
def create_article(title, content, author_id, published):
cur = conn.cursor()
cur.execute(
"INSERT INTO articles (title, content, author_id, published) VALUES (%s, %s, %s, %s)",
(title, content, author_id, published)
)
conn.commit()
cur.close()
 
# Récupération des articles publiés
def get_published_articles():
cur = conn.cursor()
cur.execute("SELECT * FROM articles WHERE published = True")
rows = cur.fetchall()
articles = []
for row in rows:
article = Article(row[0], row[1], row[2], row[3], row[4])
articles.append(article)
cur.close()
return articles
 
# Fermeture de la connexion
conn.close()

Difficultés et Limitations Complexité et Maintenance : Écrire du SQL directement dans le code augmente la complexité et rend le code plus difficile à maintenir. Les développeurs doivent gérer manuellement les détails de la syntaxe SQL et s’assurer que les requêtes sont correctement formées.

Portabilité : L’utilisation directe de SQL rendrait l’application moins portable entre différents systèmes de gestion de base de données, car chaque système a sa propre syntaxe SQL et ses particularités.

Sécurité : Sans l’abstraction fournie par l’ORM, les développeurs doivent être très prudents pour éviter les failles de sécurité comme les injections SQL, en validant et en échappant correctement les données utilisateur.

l’utilisation de Django ORM

  1. Voici comment Django ressemblerait avec l’utilisation d’ORM :

L’ORM Django simplifie la manipulation des données en permettant aux développeurs d’interagir avec la base de données à l’aide d’objets Python et de méthodes de requête abstraites. Voici comment vous pourriez définir des modèles et interagir avec la base de données en utilisant l’ORM Django :

Définition des Modèles Les modèles Django sont des classes Python qui définissent la structure des données de votre application. Chaque attribut de classe correspond à un champ de base de données, facilitant ainsi la création, la lecture, la mise à jour et la suppression des données.

from django.db import models
 
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey('Author', on_delete=models.CASCADE)
published = models.BooleanField(default=False)
 
class Author(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()

Interactions avec la Base de Données (CRUD)

Utilisation de l’ORM pour créer, lire, mettre à jour et supprimer des articles :

# Création d'un nouvel article
new_article = Article.objects.create(
title='Nouvel article avec ORM',
content='Contenu de l\'article',
author_id=1,
published=True
)
 
# Lecture des articles publiés
articles = Article.objects.filter(published=True)
 
# Mise à jour d'un article
article = Article.objects.get(id=1)
article.content = 'Nouveau contenu de l\'article avec ORM'
article.save()
 
# Suppression d'un article
article = Article.objects.get(id=1)
article.delete()

Avantages de l’ORM : L’ORM de Django facilite l’interaction avec la base de données en utilisant des classes Python pour représenter des tables de base de données, des objets pour représenter des lignes de table, et des méthodes pour effectuer des opérations CRUD (Create, Read, Update, Delete).

Structure des requêtes : Django fournit une API riche pour structurer les requêtes en utilisant des méthodes de gestion de requêtes telles que .filter(), .exclude(), .annotate(), etc.

Optimisation des requêtes : Utilisez des techniques comme select_related(), prefetch_related(), only(), defer() pour optimiser les performances des requêtes en minimisant le nombre de requêtes SQL générées et en limitant les données récupérées.

CONCLUSION

L’utilisation de l’ORM Django simplifie considérablement le développement en automatisant la génération de requêtes SQL, en offrant une interface orientée objet intuitive, et en facilitant la gestion des relations entre les modèles. Cependant, elle peut ajouter une légère surcharge de performance par rapport à l’écriture directe de SQL, surtout pour des opérations simples et directes.

En revanche, l’écriture directe de requêtes SQL offre plus de contrôle sur les détails d’implémentation et peut être plus performante dans certains cas spécifiques, mais elle nécessite une expertise SQL avancée et peut rendre le code plus difficile à maintenir.

Partager cet article:

Sokhna Fatou Gueye

Coach à Bakeli School of Technology

Bakeli est une école de formation professionnelle dans les nouvelles technologies créer par Volkeno. Elle a formé + de 6000 étudiants et professionnels aux métiers des nouvelles technologies et du digital.

Bakeli

Contacts

S'abonner à la Newsletter

Chargement en cours...

© Copyright 2024, Tous droits réservés.