1. เรียนรู้
  2. /
  3. Courses
  4. /
  5. Pythonで学ぶデータベース入門

Connected

Exercises

レコードをブロックごとに処理する

ここまで素晴らしいです!動画で Jason が述べたように、大きな ResultProxy を扱う必要がある一方で、結果を一度にすべてメモリに読み込めないことがあります。その場合の回避策として、ループ内で .fetchmany() メソッドを使って、ResultProxy から行をブロック単位で取得できます。.fetchmany() には、取得したいレコード数を引数として渡します。空のリストが返ってきたら、取得できる行はもう残っておらず、クエリ結果の処理が完了したことを意味します。最後に、.close() メソッドでデータベースへの接続を閉じる必要があります。

これから、事前に用意された大きな ResultProxy results_proxy を使って、この手法を練習していきます。

คำแนะนำ

100 XP
  • more_results があるかを確認する while ループを使います。
  • ループ内で、results_proxy に対して .fetchmany() メソッドを適用し、1 回につき 50 件のレコードを取得して、それらを partial_results として保存します。
  • レコードを取得したあと、partial_results が空リスト(つまり [] と等しい)であれば、more_results を False に設定します。
  • partial_results をループ処理し、row.state が辞書 state_count のキーであれば state_count[row.state] を 1 増やし、そうでなければ state_count[row.state] を 1 に設定します。
  • while ループの後で、.close() を使って ResultProxy results_proxy を閉じます。
  • state_count を出力するために回答を提出してください。