"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cuándo utilizar select_ related de Django ORM frente a prefetch_ related?

¿Cuándo utilizar select_ related de Django ORM frente a prefetch_ related?

Publicado el 2024-11-14
Navegar:683

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

La distinción entre select_ related y prefetch_ related de Django ORM

En Django ORM, los métodos select_ related y prefetch_ related tienen distintos propósitos para gestionar relaciones en consultas de bases de datos.

select_ related

El método select_ related de Django recupera datos relacionados modelar datos durante una consulta de base de datos mediante la realización de uniones SQL. Recupera eficientemente los campos seleccionados de los modelos relacionados, minimizando la necesidad de consultas posteriores. Este enfoque es particularmente adecuado para relaciones que involucran claves externas o conexiones OneToOneField.

prefetch_ related

A diferencia de select_ related, prefetch_ related no realiza uniones SQL. En cambio, ejecuta consultas separadas para recuperar modelos relacionados. Luego, los datos se "unen" en Python. Este método es beneficioso para relaciones que involucran ManyToManyFields o conexiones de clave externa inversa.

Ejemplo

Considere la siguiente configuración del modelo:

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

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

Para buscar un autor con sus libros relacionados usando select_ related:

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

Para buscar un autor con sus libros relacionados usando prefetch_ related:

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

Si bien ambos métodos recuperan datos relacionados, select_ related es óptimo para relaciones de un solo objeto con columnas redundantes limitadas. Por el contrario, se prefiere prefetch_ related para relaciones de muchos a muchos o relaciones escasas de clave externa inversa para minimizar la comunicación de la base de datos. Sin embargo, puede dar lugar a objetos duplicados en la representación de los datos en Python.

Declaración de liberación Este artículo se reimprime en: 1729672608 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3