объекты django ... values ​​() выбирают только некоторые поля - PullRequest
3 голосов
/ 16 августа 2011

Я оптимизирую загрузку памяти (~ 2 ГБ, режим автономного учета и анализа) этой строки:

l2 = Photograph.objects.filter(**(movie.get_selectors())).values()

Есть ли способ убедить django пропустить определенные столбцы при получении значений ()?

В частности, подпрограмма получает все строки таблицы, соответствующие определенным критериям (db оптимизируется и выполняет это очень быстро), но это слишком много для обработки Python - в каждой строке есть ссылка на длинную строку, сохраняющую URL-адреса для миниатюр.

Мне действительно нужны только три поля из каждой строки, но, если все поля включены, он внезапно потребляет около 5 КБ / строку, что, к сожалению, увеличивает объем ОЗУ до предела.

Ответы [ 2 ]

17 голосов
/ 16 августа 2011

Функция values(*fields) позволяет указать, какие поля вы хотите.

5 голосов
/ 16 августа 2011

Проверьте метод QuerySet, только .Когда вы заявляете, что only хотите, чтобы определенные поля загружались немедленно, менеджер QuerySet не будет извлекать другие поля вашего объекта, пока вы не попытаетесь получить к ним доступ.

Если вам приходится иметь делос ForeignKeys, который также должен быть предварительно выбран, затем также проверьте select_related

У двух ссылок выше на документацию Django есть хорошие примеры, которые должны прояснить их использование.


Взгляните на Панель инструментов отладки Django она поставляется с командой управления debugsqlshell, которая позволяет вам увидеть генерируемые запросы SQL, а также время, затрачиваемое на игру.с вашими моделями в оболочке django / python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...