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.
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