Найти - Пользователи
Полная версия: Поподробнее про select_related
Начало » Django » Поподробнее про select_related
1
Nick2009
Нужно сделать join по нескольким таблицам.
Есть такая функция select_related, но
1. нигде не нашел в какой конкретно SQL это преобразуется.
2. нужно выбирать не из всех related таблиц а только из нужных, т.к. их много
3. нужно выбрать поля которые будут возвращены select, т.к. целиком тащить записи накладно.
4. как Django поймет пункт 3, ведь неполный набор полей противоречит модели?
5. связанные таблицы нужно кэшировать и можно накапливать записи между запросами.

Может быть кто-нибудь из знатоков раскроет эту тему? Желательно с примерами.
Или где об этом можно почитать подробно, для чайников? На официальном сайте недостаточно информации.
Evg
А зачем вам это нужно? неужели возникают какие то проблемы со скоростью?)
я думаю в 99% процентах сильно напряжные вещи можно решить 2-мя путями:

1) засчет денормализации.
2) просто выбрать группами нужные данные и потом в скрипте все слепить.

и то почти всегда первого хватает за глаза.

ps. лучше сделать немного тормозной код но который лучше читать. А про join вообще лучше забыть. т.к если проект нагрузный то данные могут быть в таблицах которые не в одной базе и join вообще не подойдет.
Nick2009
lorien
from django.db import connection print connection.queries
Спасибо! Теперь смотрю и ужасаюсь …
Nick2009
lorien
> 3. нужно выбрать поля которые будут возвращены select, т.к. целиком тащить записи накладно.
Почитайте про функции values, values_list в том же документе, что я выше показал.

> 4. как Django поймет пункт 3, ведь неполный набор полей противоречит модели?
А там не объекты моделей возвращаются, а просто списки значений. Если нужно именно объекты моделей, читайте про defer (http://docs.djangoproject.com/en/dev/re … fer-fields). Кажется, то что вы хотите. Сам не юзал никогда.
Списков значений достаточно.
Нашел. Когда читал, не заметил. Спасибо!
Nick2009
lorien
5. связанные таблицы нужно кэшировать и можно накапливать записи между запросами.
Не уверен, что Django умеет такое. В конце концов, если всё так плохо, то кэшируйте данные ручками в рамках одного запроса (request).
Memcached + Python модуль это умеют. Поставил, использую, вроде работает, ошибок не выдает.
В рамках одного запроса тоже нужно, сейчас с этим сражаюсь. Вопрос в другом топике.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB