Converti il set di query su values_list () sarà più efficiente in termini di memoria rispetto a values () direttamente. Poiché il metodo values () restituisce un set di query di elenco di dict (chiave: coppie di valori), values_list () restituisce solo l'elenco di tuple (dati puri). Risparmierà circa il 50% di memoria, è sufficiente impostare le informazioni sulla colonna quando si chiama pd.DataFrame ().
Metodo 1:
queryset = models.xxx.objects.values ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset)) ## consuma molta memoria
#df = pd.DataFrame.from_records (queryset) ## funziona ma non cambia molto sull'utilizzo della memoria
Metodo 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset), columns = ["A", "B", "C", "D"]) ## questo farà risparmiare il 50% di memoria
#df = pd.DataFrame.from_records (queryset, columns = ["A", "B", "C", "D"]) ## Non funziona. Se si è verificato un arresto anomalo con il tipo di dati, il set di query non è l'elenco.
L'ho testato sul mio progetto con> 1 milione di righe di dati, il picco di memoria è stato ridotto da 2G a 1G.