Làm việc theo từng khối bản ghi
Bạn làm rất tuyệt cho đến giờ! Như Jason đã nói trong video, đôi khi bạn cần làm việc với một ResultProxy lớn và có thể không đủ bộ nhớ để tải toàn bộ kết quả cùng lúc. Để xử lý vấn đề này, bạn có thể lấy từng khối hàng từ ResultProxy bằng cách dùng phương thức .fetchmany() bên trong một vòng lặp. Với .fetchmany(), truyền vào số lượng bản ghi bạn muốn. Khi nhận được một danh sách rỗng, nghĩa là không còn hàng nào để lấy nữa và bạn đã xử lý xong toàn bộ kết quả truy vấn. Sau đó, bạn cần dùng phương thức .close() để đóng kết nối tới cơ sở dữ liệu.
Giờ bạn sẽ thực hành điều này trên một ResultProxy lớn tên là results_proxy đã được nạp sẵn để bạn làm việc.
Bài tập này là một phần của khóa học
Nhập môn Cơ sở dữ liệu với Python
Hướng dẫn bài tập
- Dùng vòng lặp
whileđể kiểm tra xem cònmore_resultshay không. - Bên trong vòng lặp, áp dụng phương thức
.fetchmany()lênresults_proxyđể lấy50bản ghi mỗi lần và lưu các bản ghi đó vàopartial_results. - Sau khi lấy dữ liệu, nếu
partial_resultslà danh sách rỗng (tức bằng[]), đặtmore_resultsthànhFalse. - Lặp qua
partial_resultsvà, nếurow.statelà một khóa trong từ điểnstate_count, tăngstate_count[row.state]thêm 1; ngược lại đặtstate_count[row.state]bằng 1. - Sau vòng lặp while, đóng ResultProxy
results_proxybằng.close(). - Gửi câu trả lời để in
state_count.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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)