CommencezCommencez gratuitement

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

Voir le cours

Instructions de l’exercice

  • Utilisez une boucle while qui vérifie s'il y a more_results.
  • À l'intérieur de la boucle, appliquez la méthode .fetchmany() à results_proxy pour obtenir 50 enregistrements à la fois et stockez ces enregistrements dans partial_results.
  • Après la récupération, si partial_results est une liste vide (c'est-à-dire si elle est égale à []), définissez more_results à False.
  • Parcourez partial_results et, si row.state est une clé du dictionnaire state_count, incrémentez state_count[row.state] de 1 ; sinon, définissez state_count[row.state] à 1.
  • Après la boucle while, fermez le ResultProxy results_proxy avec .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)
Modifier et exécuter le code