В чем специфика работы prefetch_related?

Рейтинг: 0Ответов: 0Опубликовано: 11.03.2023

В Django есть две функции select_related и prefetch_related.

select_related - это по сути обычный join по таблице foreign key, а prefetch_realted - можно сказать reverse join в отношениях many-to-one и many-to-many.

Прочитал, что

select_related использует отношения внешнего ключа (foreign key relationship), то есть использование соединения в самом запросе, в то время как в prefetch_related есть отдельный поиск и соединение на стороне python.

Что это значит? Понятно, что select_related сделает запрос join в базу, но разве prefetch_related не будет делать запросов?

В статье еще был приведен фрагмент кода:

country = Country.objects.prefetch_related(‘state’).get(id=1)
>> for state in country.state.all():
>> print(state.state_name)
```Query Executed

SELECT id, country_name FROM country WHERE id=1;
SELECT state_id, state_name WHERE State WHERE country_id IN (1);

Второй запрос для поиска ведь тоже выполнился, тогда почему говорится, что выполняется на стороне Python?

Ответы

Ответов пока нет.