Traitement par blocs d'enregistrements
Excellent travail jusqu'ici ! Comme Jason l'a expliqué dans la vidéo, il arrive que vous ayez à traiter un grand ResultProxy sans avoir assez de mémoire pour charger tous les résultats d'un seul coup. Pour contourner ce problème, vous pouvez récupérer des blocs de lignes du ResultProxy avec la méthode .fetchmany() à l'intérieur d'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 exercer avec un grand ResultProxy nommé results_proxy qui a été préchargé pour vous.
Cette activité fait partie du cours
Introduction aux bases de données en Python
Instructions de l’exercice
- Utilisez une boucle
whilequi vérifie s'il y amore_results. - À l'intérieur de la boucle, appliquez la méthode
.fetchmany()àresults_proxypour obtenir50enregistrements à 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_resultsàFalse. - Parcourez
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 ce code d’exemple.
# 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)