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

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

Django, un framework web robuste basé sur Python, offre une gestion avancée des bases de données grâce à son Object-Relational Mapping (ORM). Cependant, il est également possible de développer des applications Django en écrivant directement des requêtes SQL sans utiliser l'ORM intégré. Dans cet article, nous allons voir la différence à travers des exemples pratiques.

Sokhna Fatou Gueye

Sokhna Fatou Gueye

01 juillet 2024

6 min de lecture

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 :

PYTHON
# 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 :

python
# 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.

PYTHON
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 :

PYTHON
# 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

Sokhna Fatou Gueye

Coach à Bakeli School of Technology — Passionné par la technologie et la formation professionnelle en Afrique.

Retour au blog

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


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