Travailler par blocs d’enregistrements
Excellent travail jusqu’ici ! Comme Jason l’a expliqué dans la vidéo, il arrive que vous ayez besoin de traiter un ResultProxy volumineux sans pouvoir charger tous les résultats en mémoire d’un coup. Pour contourner ce problème, vous pouvez récupérer des blocs de lignes depuis le ResultProxy en utilisant la méthode .fetchmany() dans une boucle. Avec .fetchmany(), passez en argument le nombre d’enregistrements souhaité. Lorsque vous obtenez une liste vide, cela signifie qu’il n’y a plus de lignes à récupérer et que vous avez traité tous les résultats de la requête. Vous devez ensuite utiliser la méthode .close() pour fermer la connexion à la base de données.
Vous allez maintenant vous entraîner avec un ResultProxy volumineux nommé results_proxy, déjà chargé pour que vous puissiez travailler dessus.
Cet exercice fait partie du cours
Introduction aux bases de données en Python
Instructions
- Utilisez une boucle
whilequi vérifie s’il y amore_results. - À l’intérieur de la boucle, appliquez la méthode
.fetchmany()àresults_proxypour récupérer50enregistrements à la fois et stockez ces enregistrements danspartial_results. - Après la récupération, si
partial_resultsest une liste vide (c’est‑à‑dire si elle est égale à[]), définissezmore_resultssurFalse. - Itérez sur
partial_resultset, sirow.stateest une clé du dictionnairestate_count, incrémentezstate_count[row.state]de 1 ; sinon définissezstate_count[row.state]à 1. - Après la boucle while, fermez le ResultProxy
results_proxyavec.close(). - Soumettez la réponse pour afficher
state_count.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# Start a while loop checking for more results
while more_results:
# Fetch the first 50 results from the ResultProxy: partial_results
partial_results = ____
# if empty list, set more_results to False
if partial_results == []:
more_results = ____
# Loop over the fetched records and increment the count for the state
for row in ____:
if row.state in state_count:
____
else:
____
# Close the ResultProxy, and thus the connection
results_proxy.____
# Print the count by state
print(state_count)