Maison > développement back-end > Tutoriel Python > Que sont les modèles dans Django Orm?

Que sont les modèles dans Django Orm?

James Robert Taylor
Libérer: 2025-03-20 16:39:29
original
597 Les gens l'ont consulté

Que sont les modèles dans Django Orm?

Dans Django ORM (cartographie relationnelle d'objet), les modèles sont un composant crucial qui représente les tables de base de données et leurs champs associés. Essentiellement, un modèle définit la structure de vos données, y compris les champs et leurs contraintes, qui sont ensuite mappés sur les tableaux de la base de données. Lorsque vous créez un modèle dans Django, vous créez essentiellement une classe Python qui hérite de django.db.models.Model . Cette classe définit divers attributs, qui deviennent les champs de la table dans la base de données.

Par exemple, un modèle simple pour un livre peut ressembler à ceci:

 <code class="python">from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) publication_date = models.DateField()</code>
Copier après la connexion

Dans cet exemple, Book est un modèle avec trois champs: title , author et publication_date . L'ORM de Django créera une table correspondante dans la base de données avec ces champs.

Quels avantages les modèles offrent-ils dans Django ORM?

Les modèles de Django ORM offrent de nombreux avantages, améliorant à la fois le processus de développement et la maintenabilité de l'application:

  1. Abstraction : les modèles offrent une abstraction de haut niveau sur le système de base de données sous-jacent. Cela permet aux développeurs d'interagir avec la base de données à l'aide du code Python plutôt que d'écrire SQL, qui peut être plus intuitif et moins sujet aux erreurs.
  2. Portabilité : Parce que les modèles ne sont liés à aucun backend de base de données spécifique, vous pouvez facilement basculer entre différents systèmes de base de données (comme SQLite, PostgreSQL, MySQL) sans modifier votre code Python.
  3. Validation : les modèles Django sont livrés avec des capacités de validation intégrées. Vous pouvez spécifier des règles et des contraintes sur les champs du modèle, en garantissant l'intégrité des données avant d'être enregistrée dans la base de données.
  4. Interface d'administration automatique : le site d'administration de Django peut générer automatiquement une interface conviviale pour gérer les données du modèle, en gagnant du temps sur le développement d'outils administratifs personnalisés.
  5. Gestion des relations : les modèles facilitent la définition de relations complexes entre les tables, telles que les relations individuelles, un-à-plusieurs et plusieurs à plusieurs, simplifiant l'association et la récupération des données.
  6. Migrations : Django prend en charge les migrations de la base de données, vous permettant d'évoluer vos modèles et le schéma de base de données correspondant au fil du temps de manière contrôlée et réversible.
  7. API Query : Django fournit une puissante API QuerySet qui vous permet d'écrire des requêtes complexes de manière pythonique, ce qui facilite la récupération, le filtre et la manipulation des données.

Comment définissez-vous les relations entre les modèles dans Django Orm?

La définition des relations entre les modèles dans Django ORM se fait à l'aide de types de champs spécifiques qui représentent différents types de relations. Voici les principaux types de relations et comment les définir:

  1. Relations individuelles :
    Utilisez OneToOneField lorsqu'une ligne dans une seule table est liée à exactement une ligne dans une autre table. Ceci est utile pour étendre les modèles ou lorsque vous devez diviser une grande table en deux.

     <code class="python">class Driver(models.Model): license_number = models.CharField(max_length=20) class Car(models.Model): driver = models.OneToOneField(Driver, on_delete=models.CASCADE)</code>
    Copier après la connexion
  2. Relations individuelles :
    Utilisez ForeignKey pour définir une relation où une seule ligne dans une seule table peut être associée à plusieurs lignes dans une autre table. Il s'agit du type de relation le plus courant dans les bases de données.

     <code class="python">class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) title = models.CharField(max_length=200)</code>
    Copier après la connexion
  3. Relations de plusieurs à plusieurs :
    Utilisez ManyToManyField lorsque les lignes dans une seule table peuvent être associées à plusieurs lignes dans une autre table, et vice versa. Ceci est utile pour des scénarios comme la catégorisation des éléments.

     <code class="python">class Book(models.Model): title = models.CharField(max_length=200) class Author(models.Model): name = models.CharField(max_length=100) books = models.ManyToManyField(Book)</code>
    Copier après la connexion

Lorsque vous définissez ces relations, vous spécifiez le paramètre on_delete pour définir ce qui se passe lorsque l'objet associé est supprimé.

Quelles sont les meilleures pratiques pour optimiser les requêtes de modèle dans Django Orm?

L'optimisation des requêtes de modèle dans Django ORM est essentielle pour améliorer les performances de votre application. Voici quelques meilleures pratiques à suivre:

  1. Sélectionnez lié et préfectif lié :
    Utilisez select_related() pour les relations un à un et plusieurs à un pour réduire le nombre de requêtes de base de données. Utilisez prefetch_related() pour les relations multiples et inversées de plusieurs à un.

     <code class="python"># Fetching all books with their authors books = Book.objects.select_related('author').all() # Fetching all authors with their books authors = Author.objects.prefetch_related('books').all()</code>
    Copier après la connexion
  2. Utilisez efficacement les méthodes QuerySet :
    Tirez parti des méthodes API QuerySet de Django comme filter() , exclude() , order_by() et values() pour récupérer uniquement les données requises, en réduisant la quantité de données traitées et transférées.

     <code class="python"># Fetching only specific fields authors = Author.objects.values('id', 'name')</code>
    Copier après la connexion
  3. Évitez le problème de requête n 1 :
    Soyez prudent du problème de requête N 1, où une requête initiale récupère une liste d'objets, puis n plus de requêtes sont exécutées pour récupérer les données connexes. Utilisez select_related() et prefetch_related() pour l'atténuer.
  4. Utiliser les index de manière appropriée :
    Ajoutez des index de base de données aux champs fréquemment utilisés dans les opérations de filtrage ou de commande pour accélérer l'exécution de la requête.

     <code class="python">class Book(models.Model): title = models.CharField(max_length=200, db_index=True)</code>
    Copier après la connexion
  5. Limiter les résultats de la requête :
    Utilisez des méthodes comme limit() et offset() ou Django QuerySet Sinsification pour limiter le nombre d'objets récupérés, en particulier lorsqu'ils traitent de grands ensembles de données.

     <code class="python"># Fetching the first 10 books books = Book.objects.all()[:10]</code>
    Copier après la connexion
  6. Évitez d'utiliser select_related() sur ManyToManyField ou reverse ForeignKey :
    select_related() ne fonctionne pas avec les relations ManyToManyField ou Inverse ForeignKey . Utilisez plutôt prefetch_related() .
  7. Résultats de la requête en cache :
    Utilisez le cadre de mise en cache de Django pour stocker les résultats des requêtes coûteuses, en réduisant la nécessité de demander à plusieurs reprises la base de données.

En suivant ces meilleures pratiques, vous pouvez optimiser considérablement les performances de vos requêtes Django Orm et améliorer l'efficacité globale de votre application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal