Maison >développement back-end >Tutoriel Python >Explication détaillée de Django ORM, le framework ORM en Python
Django ORM est un framework ORM classique en Python. Il fait partie du framework Django Web et fournit un moyen pratique pour les opérations de base de données. ORM signifie Object Relational Mapping, qui peut mapper des tables de bases de données relationnelles avec des classes en Python, simplifiant ainsi le processus de développement et améliorant l'efficacité du développement. Cet article présentera Django ORM en détail.
I. Le concept de base d'ORM
ORM est une technologie qui mappe des objets à des bases de données relationnelles. Il implémente principalement les trois fonctions suivantes :
Le principal avantage de l'ORM est qu'il peut réduire le temps et les efforts des développeurs qui écrivent des instructions SQL répétitives et peut réduire les erreurs causées par les ajustements et les modifications de Instructions SQL.
II. Avantages de Django ORM
Par rapport aux autres frameworks ORM, Django ORM présente les avantages suivants :
III. Comment utiliser Django ORM
Vous devez d'abord installer Django, vous pouvez utiliser pip pour installer :
pip install Django
Lorsque vous utilisez Django ORM, vous devez d'abord définir la classe modèle, classe modèle C'est une classe en Python qui définit les champs de la table de données et d'autres métadonnées de la table de données, telles que le nom de la table, l'index, etc. Ce qui suit est une définition simple de classe de modèle :
from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) pub_date = models.DateTimeField()
Dans le code ci-dessus, nous utilisons le module models
fourni par Django ORM pour définir une table de données nommée Book
, qui contient trois champs : titre
, auteur
, pub_date
. max_length
est utilisé pour spécifier la longueur maximale des champs de type chaîne, et DateTimeField
est utilisé pour stocker les champs de type heure. models
模块来定义了一个名为Book
的数据表,其中包含了三个字段:title
、author
、pub_date
。max_length
用于指定字符串类型字段的最大长度,DateTimeField
用于存储时间类型字段。
在完成模型类的定义后,需要通过迁移生成数据库表。Django ORM提供了自动迁移功能,只需运行以下命令即可生成数据表:
python manage.py makemigrations python manage.py migrate
以上命令创建了Book
表,表结构与定义的模型类对应。
a. 创建记录
通过模型类可以轻松地向数据表中添加新的记录,在以下代码中,我们创建了一条新的记录并将其保存到数据库中:
from datetime import datetime book = Book(title='Django ORM Tutorial', author='Terry', pub_date=datetime.now()) book.save()
b. 更新记录
使用Django ORM更新记录非常简单,只需先查询记录,然后将其更新并保存即可。以下是一个简单的更新代码示例:
book = Book.objects.get(id=1) book.title = 'Updated Title' book.save()
c. 删除记录
删除记录也非常简单,只需执行以下代码即可:
book = Book.objects.get(id=1) book.delete()
d. 查询记录
在Django ORM中,可以使用objects
对象进行查询,以下是一个简单的查询示例代码:
books = Book.objects.all() for book in books: print(book.title, book.author, book.pub_date)
该代码将输出Book
表中所有记录的title
、author
和pub_date
字段。
IV. 高级查询操作
除了基本的CRUD操作外,Django ORM还支持一些高级查询操作,如连表查询、查询条件组合、聚合操作等,以下是一些示例代码。
a. 连表查询
Django ORM中支持两种方式的连表查询:一种是通过ForeignKey
字段进行关联,另一种是通过自定义查询进行关联。
# 通过ForeignKey字段关联 class Author(models.Model): name = models.CharField(max_length=50) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) books = Book.objects.filter(author__name='Leo Tolstoy') # 以上代码查询了作者名为'Leo Tolstoy'的所有图书 # 通过自定义查询进行关联 books = Book.objects.raw('SELECT * FROM app_book INNER JOIN app_author ON app_book.author_id = app_author.id WHERE app_author.name = %s', ['Leo Tolstoy'])
b. 查询条件组合
在Django ORM中,可以使用Q
对象将多个查询条件进行组合,以实现更加复杂的查询。以下是一个示例代码:
from django.db.models import Q books = Book.objects.filter(Q(title__contains='Django') | Q(author__contains='Guido')) # 以上代码查询了标题中包含'Django'或作者名中包含'Guido'的所有图书
c. 聚合操作
聚合操作用于对数据进行分组或汇总统计。Django ORM中支持的聚合操作包括:Avg
、Max
、Min
、Count
、Sum
Après avoir terminé la définition de la classe modèle, vous devez générer la table de base de données via la migration. Django ORM fournit une fonction de migration automatique. Exécutez simplement la commande suivante pour générer une table de données :
from django.db.models import Avg avg_pub_date = Book.objects.all().aggregate(Avg('pub_date')) # 以上代码计算了所有图书的发布时间的平均值🎜La commande ci-dessus crée la table
Book
, et la structure de la table correspond à la classe de modèle définie. 🎜. objets
à interroger, voici un exemple de code de requête simple : 🎜rrreee🎜Ce code affichera le titre
, le de tous les enregistrements du <code>Livre
champs de la table >auteur et pub_date
. 🎜🎜IV.Opérations de requête avancées🎜🎜En plus des opérations CRUD de base, Django ORM prend également en charge certaines opérations de requête avancées, telles que la requête de jointure de table, la combinaison de conditions de requête, l'opération d'agrégation, etc. Voici quelques exemples de codes. 🎜🎜a. Requête de jointure de table🎜🎜Django ORM prend en charge deux méthodes de requête de jointure de table : l'une consiste à s'associer via le champ ForeignKey
et l'autre consiste à s'associer via une requête personnalisée. 🎜rrreee🎜b. Combinaison de conditions de requête🎜🎜Dans Django ORM, vous pouvez utiliser l'objet Q
pour combiner plusieurs conditions de requête afin de réaliser des requêtes plus complexes. Voici un exemple de code : 🎜rrreee🎜c. Opération d'agrégation 🎜🎜L'opération d'agrégation est utilisée pour regrouper des données ou résumer des statistiques. Les opérations d'agrégation prises en charge dans Django ORM incluent : Avg
, Max
, Min
, Count
, Sumetc. Voici un exemple de code : 🎜rrreee🎜V. Résumé🎜🎜Cet article fournit une introduction détaillée au framework ORM Django ORM en Python. Django ORM est un framework ORM facile à utiliser, riche en fonctionnalités et évolutif qui peut aider les développeurs à réaliser un développement rapide et des opérations de base de données plus efficaces. En plus des opérations CRUD de base, Django ORM prend également en charge certaines opérations de requête avancées, telles que les requêtes de jointure de table, les combinaisons de conditions de requête, les opérations d'agrégation, etc., qui peuvent répondre aux besoins d'un plus grand nombre d'opérations de données. 🎜
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!