J'ai un jeu de résultats de requête de ~ 9 millions de lignes.En utilisant Python/PyGreSQL, comment gérer efficacement un grand ensemble de résultats?
que je dois faire un peu de traitement pour chaque ligne, et le code le fait déjà:
query = conn.query(sql)
results = query.getresult()
for row in results:
# blah
Je ne suis pas sûr, mais je pense que getresult()
tire vers le bas l'ensemble des résultats. Est-ce le cas? J'imagine qu'il y a un moyen de tirer seulement des morceaux du jeu de résultats à travers le fil comme nécessaire, mais je n'ai pas vu immédiatement quelque chose comme ça dans les docs du module pg
.
Est-il possible de faire cela avec le module pgdb
ou une autre approche? Mes préoccupations concernent la mémoire sur la machine d'application - je préférerais ne pas charger des millions de lignes en mémoire en une seule fois si je peux l'aider.
Cela vaut-il même la peine de s'inquiéter?
Selon les documents pygresql, getresult renvoie un objet pyquery, avec différentes listes contenant toutes les données pour la requête associée. Vous aurez besoin de voir si l'une des bibliothèques d'accès db alternatives de python inclut un itérateur pour les résultats de la requête. –