Kayıt bloklarıyla çalışma
Şimdiye kadar harika gidiyorsun! Jason’ın videoda anlattığı gibi, bazen büyük bir ResultProxy ile çalışman gerekebilir ve tüm sonuçları bir kerede belleğe sığdıracak kapasiten olmayabilir. Bu sorunu aşmak için, döngü içinde .fetchmany() yöntemini kullanarak ResultProxy’den satırları bloklar halinde alabilirsin. .fetchmany() ile, istediğin kayıt sayısını argüman olarak verirsin. Boş bir listeye ulaştığında, alınacak başka satır kalmamış demektir ve sorgunun tüm sonuçlarını işlemiş olursun. Sonrasında veritabanı bağlantısını kapatmak için .close() yöntemini kullanman gerekir.
Şimdi, senin için önceden yüklenmiş olan ve üzerinde çalışabileceğin results_proxy adlı büyük bir ResultProxy üzerinde bunu pratik etme şansın olacak.
Bu egzersiz, kursun bir parçasıdır
Python ile Veritabanlarına Giriş
Egzersiz talimatları
more_resultsolup olmadığını kontrol eden birwhiledöngüsü kullan.- Döngünün içinde,
results_proxyüzerinde.fetchmany()yöntemini uygulayarak her seferinde50kayıt al ve bu kayıtlarıpartial_resultsolarak sakla. - Kayıtları aldıktan sonra,
partial_resultsboş bir listeyse (yani[]ise),more_resultsdeğeriniFalseyap. partial_resultsüzerinde döngü kur ve eğerrow.state,state_countsözlüğünde bir anahtarsastate_count[row.state]değerini 1 artır; aksi haldestate_count[row.state]değerini 1 olarak ayarla.- While döngüsünden sonra,
.close()kullanarakresults_proxyResultProxy nesnesini kapat. state_countyazdırılsın diye yanıtı gönder.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
# 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)