Перетворення набору запитів на 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 (набір запитів) ## працює, але особливих змін у використанні пам'яті немає
Спосіб 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (список (набір запитів), стовпці = ["A", "B", "C", "D"]) ## це заощадить 50% пам'яті
#df = pd.DataFrame.from_records (набір запитів, стовпці = ["A", "B", "C", "D"]) ## Це не працює. Збій з типом даних є набором запитів, а не списком.
Я перевірив це на своєму проекті, що містить> 1 мільйон рядків даних, пік пам'яті зменшено з 2G до 1G.