"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 > Como o método `select_related` do Django pode ser usado para obter um efeito de junção interna ao trabalhar com tabelas relacionadas?

Como o método `select_related` do Django pode ser usado para obter um efeito de junção interna ao trabalhar com tabelas relacionadas?

Publicado em 2024-11-18
Navegar:257

How can Django\'s `select_related` method be used to achieve an inner join effect when working with related tables?

Inner Join no Django: Conectando tabelas relacionadas

Para exibir dados de múltiplas tabelas relacionadas no Django, muitas vezes é necessária uma junção interna. Neste artigo, exploraremos como realizar uma junção interna usando o ORM (Mapeador Objeto-Relacional) do Django.

Model Relationships

Os models.py no o código fornecido define os seguintes relacionamentos de tabela:

  • país para paísestado (chave estrangeira)
  • paísestado para cidade (chave estrangeira)
  • publicação para país, paísestado e cidade (chaves estrangeiras)

Inner Join Usando select_related

Para obter um efeito de junção interna, o método select_related do Django pode ser empregado. Ele pré-seleciona os objetos relacionados junto com os objetos primários, reduzindo o número de consultas ao banco de dados necessárias para acessar os dados relacionados.

No views.py, o código a seguir pode ser usado para realizar uma junção interna:

pubs = publication.objects.select_related('country', 'country_state', 'city')

Inspecionando o SQL gerado

Usando str(pubs.query), a consulta SQL gerada pode ser inspecionada. Será semelhante à consulta SQL fornecida, com junções internas entre as tabelas:

SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ...  
FROM "publication" 
INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" ) 
INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" ) 
INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" ) 

Acessando dados relacionados

Após a junção interna, o os dados relacionados podem ser acessados ​​por meio dos respectivos atributos do objeto do modelo. Por exemplo, para exibir o nome da cidade de cada publicação:

{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}

Ao utilizar o select_related do Django, as junções internas podem ser implementadas de forma eficiente para recuperar dados de tabelas relacionadas, reduzindo consultas ao banco de dados e melhorando o desempenho.

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