Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah kaedah `select_related` Django boleh digunakan untuk mencapai kesan cantuman dalaman apabila bekerja dengan jadual berkaitan?

Bagaimanakah kaedah `select_related` Django boleh digunakan untuk mencapai kesan cantuman dalaman apabila bekerja dengan jadual berkaitan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 05:51:02834semak imbas

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

Sambungan Dalaman dalam Django: Menyambung Jadual Berkaitan

Untuk memaparkan data daripada berbilang jadual berkaitan dalam Django, cantuman dalaman selalunya diperlukan. Dalam artikel ini, kami akan meneroka cara melakukan gabungan dalaman menggunakan ORM Django (Object-Relational Mapper).

Hubungan Model

The models.py dalam kod yang disediakan mentakrifkan perhubungan jadual berikut:

  • negara ke negara (kunci asing)
  • negara ke bandar (kunci asing)
  • penerbitan ke negara, negara dan bandar (kunci asing)

Sertai Dalaman Menggunakan select_related

Untuk mencapai kesan cantuman dalaman, kaedah select_related Django boleh digunakan. Ia pra-memilih objek yang berkaitan bersama-sama dengan objek utama, mengurangkan bilangan pertanyaan pangkalan data yang diperlukan untuk mengakses data yang berkaitan.

Dalam views.py, kod berikut boleh digunakan untuk melakukan gabungan dalaman:

<code class="python">pubs = publication.objects.select_related('country', 'country_state', 'city')</code>

Memeriksa SQL Dijana

Menggunakan str(pubs.query), pertanyaan SQL yang dijana boleh diperiksa. Ia akan menyerupai pertanyaan SQL yang disediakan, dengan cantuman dalaman antara jadual:

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" ) 

Mengakses Data Berkaitan

Selepas cantuman dalaman, data berkaitan boleh diakses melalui atribut objek model masing-masing. Contohnya, untuk memaparkan nama bandar bagi setiap penerbitan:

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

Dengan menggunakan select_related Django, cantuman dalaman boleh dilaksanakan dengan cekap untuk mendapatkan semula data daripada jadual berkaitan, mengurangkan pertanyaan pangkalan data dan meningkatkan prestasi.

Atas ialah kandungan terperinci Bagaimanakah kaedah `select_related` Django boleh digunakan untuk mencapai kesan cantuman dalaman apabila bekerja dengan jadual berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn