"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Quando usar select_relacionado vs. prefetch_relacionado do Django ORM?

Quando usar select_relacionado vs. prefetch_relacionado do Django ORM?

Publicado em 2024-11-14
Navegar:418

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

A distinção entre select_relacionado e prefetch_relacionado do Django ORM

No Django ORM, os métodos select_relacionados e prefetch_relacionados servem a propósitos distintos para gerenciar relacionamentos em consultas de banco de dados.

select_relacionado

O método select_relacionado do Django busca itens relacionados modelar dados durante uma consulta ao banco de dados executando junções SQL. Recupera com eficiência os campos selecionados dos modelos relacionados, minimizando a necessidade de consultas subsequentes. Essa abordagem é particularmente adequada para relacionamentos que envolvem conexões de chave estrangeira ou OneToOneField.

prefetch_related

Diferentemente de select_related, prefetch_related não executa junções SQL. Em vez disso, executa consultas separadas para recuperar modelos relacionados. Os dados são então "juntados" em Python. Este método é benéfico para relacionamentos envolvendo ManyToManyFields ou conexões reversas de chave estrangeira.

Exemplo

Considere a seguinte configuração de modelo:

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

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

Para buscar um autor com seus livros 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 um autor com seus livros 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)

Embora ambos os métodos recuperem dados relacionados, select_related é ideal para relacionamentos de objeto único com colunas redundantes limitadas. Em contraste, prefetch_relacionado é preferido para relacionamentos muitos-para-muitos ou relacionamentos de chave estrangeira reversa esparsos para minimizar a comunicação do banco de dados. No entanto, isso pode resultar em objetos duplicados na representação Python dos dados.

Declaração de lançamento Este artigo foi reimpresso em: 1729672608 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3