«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как можно использовать метод select_related в Django для достижения эффекта внутреннего соединения при работе со связанными таблицами?

Как можно использовать метод select_related в Django для достижения эффекта внутреннего соединения при работе со связанными таблицами?

Опубликовано 18 ноября 2024 г.
Просматривать:172

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

Внутреннее соединение в Django: соединение связанных таблиц

Чтобы отобразить данные из нескольких связанных таблиц в Django, часто необходимо внутреннее соединение. В этой статье мы рассмотрим, как выполнить внутреннее соединение с помощью ORM (объектно-реляционного картографа) Django.

Отношения моделей

Models.py в предоставленный код определяет следующие связи между таблицами:

  • страна — страна (внешний ключ)
  • страна — город (внешний ключ)
  • публикация — страна, страна — государство и city ​​(внешние ключи)

Внутреннее соединение с использованием select_related

Для достижения эффекта внутреннего соединения можно использовать метод Django select_related. Он предварительно выбирает связанные объекты вместе с основными объектами, сокращая количество запросов к базе данных, необходимых для доступа к связанным данным.

В view.py для выполнения внутреннего соединения можно использовать следующий код:

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

Проверка сгенерированного SQL

Используя str(pubs.query), можно проверить сгенерированный SQL-запрос. Он будет напоминать предоставленный SQL-запрос с внутренними соединениями между таблицами:

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

Доступ к связанным данным

После внутреннего соединения Доступ к связанным данным можно получить через соответствующие атрибуты объекта модели. Например, чтобы отображать название города для каждой публикации:

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

Благодаря использованию select_related в Django можно эффективно реализовать внутренние соединения для извлечения данных из связанных таблиц, сокращая количество запросов к базе данных и повышая производительность.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3