Das Konvertieren des Abfragesatzes in values_list () ist speichereffizienter als in values () direkt. Da die Methode values () eine Abfragemenge der Liste von dict (Schlüssel: Wertepaare) zurückgibt, gibt values_list () nur die Liste von Tupeln (reine Daten) zurück. Dies spart etwa 50% Speicherplatz. Sie müssen lediglich die Spalteninformationen festlegen, wenn Sie pd.DataFrame () aufrufen.
Methode 1:
queryset = models.xxx.objects.values ("A", "B", "C", "D")
df = pd.DataFrame (Liste (Abfragesatz)) ## verbraucht viel Speicher
#df = pd.DataFrame.from_records (Abfragesatz) ## funktioniert, ändert sich jedoch nicht wesentlich an der Speichernutzung
Methode 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (Liste (Abfragesatz), Spalten = ["A", "B", "C", "D"]) ## Dies spart 50% Speicher
#df = pd.DataFrame.from_records (Abfragesatz, Spalten = ["A", "B", "C", "D"]) ## Es funktioniert nicht. Absturz mit Datentyp ist Queryset nicht Liste.
Ich habe dies in meinem Projekt mit> 1 Million Zeilendaten getestet, der Spitzenspeicher ist von 2G auf 1G reduziert.