Convertir le jeu de requêtes sur values_list () sera plus efficace en mémoire que sur values () directement. Puisque la méthode values () renvoie un ensemble de requêtes de liste de dict (paires clé: valeur), values_list () renvoie uniquement la liste de tuple (données pures). Cela économisera environ 50% de mémoire, il suffit de définir les informations de la colonne lorsque vous appelez pd.DataFrame ().
Méthode 1:
queryset = models.xxx.objects.values ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset)) ## consomme beaucoup de mémoire
#df = pd.DataFrame.from_records (queryset) ## fonctionne mais pas beaucoup de changement sur l'utilisation de la mémoire
Méthode 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset), columns = ["A", "B", "C", "D"]) ## cela économisera 50% de mémoire
#df = pd.DataFrame.from_records (queryset, columns = ["A", "B", "C", "D"]) ## Cela ne fonctionne pas. Crashed with datatype is queryset not list.
J'ai testé cela sur mon projet avec> 1 million de données de lignes, la mémoire de pointe est réduite de 2G à 1G.