ComenzarEmpieza gratis

Trabajar con bloques de registros

¡Fantástico trabajo hasta ahora! Como comentó Jason en el vídeo, a veces puedes necesitar trabajar con un ResultProxy grande y puede que no tengas memoria suficiente para cargar todos los resultados a la vez. Para evitar ese problema, puedes obtener bloques de filas del ResultProxy usando el método .fetchmany() dentro de un bucle. Con .fetchmany(), pásale como argumento el número de registros que quieres. Cuando obtengas una lista vacía, ya no quedan más filas por recuperar y habrás procesado todos los resultados de la consulta. Después, debes usar el método .close() para cerrar la conexión con la base de datos.

Ahora tendrás la oportunidad de practicar esto con un ResultProxy grande llamado results_proxy que ya está precargado para que trabajes con él.

Este ejercicio forma parte del curso

Introducción a las bases de datos en Python

Ver curso

Instrucciones del ejercicio

  • Usa un bucle while que compruebe si hay more_results.
  • Dentro del bucle, aplica el método .fetchmany() a results_proxy para obtener 50 registros cada vez y guarda esos registros como partial_results.
  • Después de recuperar los registros, si partial_results es una lista vacía (es decir, si es igual a []), establece more_results en False.
  • Recorre partial_results y, si row.state es una clave en el diccionario state_count, incrementa state_count[row.state] en 1; en caso contrario, establece state_count[row.state] en 1.
  • Después del bucle while, cierra el ResultProxy results_proxy usando .close().
  • Envia la respuesta para imprimir state_count.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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)
Editar y ejecutar código