"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Quand utiliser select_rated ou prefetch_rated de Django ORM ?

Quand utiliser select_rated ou prefetch_rated de Django ORM ?

Publié le 2024-11-14
Parcourir:178

When to Use Django ORM\'s select_related vs. prefetch_related?

La distinction entre les méthodes select_rated et prefetch_rated de Django ORM

Dans Django ORM, les méthodes select_rated et prefetch_rated servent des objectifs distincts pour la gestion des relations dans les requêtes de base de données.

select_rated

La méthode select_rated de Django récupère les données de modèle associées lors d'une requête de base de données en effectuant des jointures SQL. Il récupère efficacement les champs sélectionnés des modèles associés, minimisant ainsi le besoin de requêtes ultérieures. Cette approche est particulièrement adaptée aux relations impliquant des connexions de clé étrangère ou OneToOneField.

prefetch_rated

Contrairement à select_rated, prefetch_rated n'effectue pas de jointures SQL. Au lieu de cela, il exécute des requêtes distinctes pour récupérer les modèles associés. Les données sont ensuite « jointes » en Python. Cette méthode est bénéfique pour les relations impliquant ManyToManyFields ou des connexions de clé étrangère inversées.

Exemple

Considérez la configuration de modèle suivante :

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)

Pour récupérer un auteur avec ses livres associés à l'aide de select_rated :

author = Author.objects.select_related('book_set').get(pk=1)
for book in author.book_set.all():
    print(book.title)

Pour récupérer un auteur et ses livres associés à l'aide de prefetch_rated :

authors = Author.objects.prefetch_related('book_set').all()
for author in authors:
    for book in author.book_set.all():
        print(book.title)

Bien que les deux méthodes récupèrent les données associées, select_rated est optimale pour les relations d'objet unique avec des colonnes redondantes limitées. En revanche, prefetch_rated est préféré pour les relations plusieurs-à-plusieurs ou les relations de clé étrangère inversée clairsemées afin de minimiser la communication avec la base de données. Cependant, cela peut entraîner des objets en double dans la représentation Python des données.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729672608. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3