Преобразование набора запросов в values_list () будет более эффективным с точки зрения памяти, чем напрямую в values (). Поскольку метод values () возвращает набор запросов из списка dict (пары ключ: значение), values_list () возвращает только список кортежей (чистые данные). Это сэкономит около 50% памяти, просто нужно установить информацию о столбце при вызове pd.DataFrame ().
Способ 1:
queryset = models.xxx.objects.values («A», «B», «C», «D»)
df = pd.DataFrame (list (queryset)) ## потребляет много памяти
#df = pd.DataFrame.from_records (queryset) ## работает, но без особых изменений в использовании памяти
Способ 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset), columns = ["A", "B", "C", "D"]) ## это сэкономит 50% памяти
#df = pd.DataFrame.from_records (queryset, columns = ["A", "B", "C", "D"]) ## Это не работает. Сбой с типом данных - это набор запросов, а не список.
Я тестировал это в своем проекте с данными> 1 миллиона строк, пиковая память уменьшена с 2 ГБ до 1 ГБ.