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
Instrucciones del ejercicio
- Usa un bucle
whileque compruebe si haymore_results. - Dentro del bucle, aplica el método
.fetchmany()aresults_proxypara obtener50registros cada vez y guarda esos registros comopartial_results. - Después de recuperar los registros, si
partial_resultses una lista vacía (es decir, si es igual a[]), establecemore_resultsenFalse. - Recorre
partial_resultsy, sirow.statees una clave en el diccionariostate_count, incrementastate_count[row.state]en 1; en caso contrario, establecestate_count[row.state]en 1. - Después del bucle while, cierra el ResultProxy
results_proxyusando.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)