CommencerCommencer gratuitement

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

Afficher le cours

Instructions

  • 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 récupérer 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 sur False.
  • Itérez sur 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 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)
Modifier et exécuter le code