В чем специфика работы prefetch_related?
В 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
?
Источник: Stack Overflow на русском