Convertir el conjunto de consultas en lista_valores () será más eficiente en memoria que en valores () directamente. Dado que el método values () devuelve un conjunto de consultas de una lista de dict (pares clave: valor), values_list () solo devuelve una lista de tuplas (datos puros). Ahorrará aproximadamente un 50% de memoria, solo necesita configurar la información de la columna cuando llame a pd.DataFrame ().
Método 1:
queryset = models.xxx.objects.values ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset)) ## consume mucha memoria
#df = pd.DataFrame.from_records (queryset) ## funciona pero no hay muchos cambios en el uso de la memoria
Método 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (lista (conjunto de consultas), columnas = ["A", "B", "C", "D"]) ## esto ahorrará 50% de memoria
#df = pd.DataFrame.from_records (conjunto de consultas, columnas = ["A", "B", "C", "D"]) ## No funciona. Se bloqueó con el tipo de datos, el conjunto de consultas no está en la lista.
Probé esto en mi proyecto con> 1 millón de datos de filas, la memoria máxima se reduce de 2G a 1G.