Bekerja dengan blok rekaman
Kerja Anda sejauh ini luar biasa! Seperti yang dibahas Jason dalam video, kadang-kadang Anda perlu bekerja dengan ResultProxy yang besar, dan Anda mungkin tidak memiliki memori untuk memuat semua hasil sekaligus. Untuk mengatasi hal tersebut, Anda dapat mengambil blok baris dari ResultProxy dengan menggunakan metode .fetchmany() di dalam sebuah loop. Dengan .fetchmany(), berikan argumen berupa jumlah rekaman yang Anda inginkan. Saat Anda mendapatkan daftar kosong, itu berarti tidak ada baris tersisa untuk diambil, dan Anda telah memproses semua hasil kueri. Kemudian Anda perlu menggunakan metode .close() untuk menutup koneksi ke database.
Sekarang Anda akan berlatih ini pada sebuah ResultProxy besar bernama results_proxy yang telah disiapkan untuk Anda.
Latihan ini adalah bagian dari kursus
Pengantar Basis Data di Python
Petunjuk latihan
- Gunakan
whileloop yang memeriksa apakah masih adamore_results. - Di dalam loop, terapkan metode
.fetchmany()padaresults_proxyuntuk mengambil50rekaman setiap kali dan simpan rekaman tersebut sebagaipartial_results. - Setelah mengambil rekaman, jika
partial_resultsadalah daftar kosong (yaitu sama dengan[]), aturmore_resultsmenjadiFalse. - Lakukan loop pada
partial_resultsdan, jikarow.stateadalah sebuah key dalam dictionarystate_count, tambahkanstate_count[row.state]sebanyak 1; jika tidak, aturstate_count[row.state]menjadi 1. - Setelah while loop, tutup ResultProxy
results_proxymenggunakan.close(). - Kirim jawaban untuk mencetak
state_count.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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)