Trabalhando com blocos de registros
Trabalho fantástico até aqui! Como Jason comentou no vídeo, às vezes você pode precisar lidar com um ResultProxy grande e talvez não tenha memória para carregar todos os resultados de uma vez. Para contornar isso, você pode obter blocos de linhas do ResultProxy usando o método .fetchmany() dentro de um loop. Com .fetchmany(), passe como argumento o número de registros desejados. Quando você receber uma lista vazia, não há mais linhas para buscar e você terá processado todos os resultados da consulta. Em seguida, use o método .close() para encerrar a conexão com o banco de dados.
Agora você terá a chance de praticar isso com um ResultProxy grande chamado results_proxy, que já foi pré-carregado para você usar.
Este exercício faz parte do curso
Introdução a Bancos de Dados em Python
Instruções do exercício
- Use um loop
whileque verifique se hámore_results. - Dentro do loop, aplique o método
.fetchmany()aresults_proxypara obter50registros por vez e armazene esses registros comopartial_results. - Após buscar os registros, se
partial_resultsfor uma lista vazia (isto é, se for igual a[]), definamore_resultscomoFalse. - Faça um loop sobre
partial_resultse, serow.statefor uma chave no dicionáriostate_count, incrementestate_count[row.state]em 1; caso contrário, definastate_count[row.state]como 1. - Após o loop while, feche o ResultProxy
results_proxyusando.close(). - Envie a resposta para imprimir
state_count.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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)