【かーそる】
カーソル(DB) とは?
最終更新:
💡 検索結果の位置を持ち、必要な行を取り出して処理する
データベースのクエリ結果に対する位置を持ち、そこから行を取り出す仕組み。1行ずつ、または複数行ずつ処理できる。DBのサーバー側カーソルと、ライブラリのカーソルオブジェクトでは、結果の保持場所や取得方法が異なることがある。
📌 このページのポイント
カーソルって画面のカーソルと同じ?
どちらも位置を扱うけど、DBではクエリ結果の位置を持つ仕組みだよ。FETCHで行を取得すると位置が進む。最初の行より前や最後の行より後にある状態もあり、必ず現在の1行だけを指しているわけではないんだ。
1行ずつしか取り出せないの?
1行ずつも、指定した件数をまとめても取り出せるよ。たとえばPostgreSQLのFETCH NEXTは次の1行、FETCH FORWARD 100は前方へ最大100行を取得する。戻れるかどうかなどはカーソルの設定によるので、順方向だけとは限らないんだ。
Pythonのcursorも同じ?
Psycopgではcursorからexecute()でSQLを送り、fetchone()やfetchmany()、fetchall()で結果を受け取るよ。ただし通常のカーソルは結果をクライアントへまとめて転送するので、fetchone()で処理していても、全体がメモリに置かれていることがあるんだ。
大量データでメモリを節約するには?
Psycopgの名前付きカーソルは、PostgreSQLのサーバー側カーソルを使って、制御した件数をクライアントへ転送できるよ。それでも受け取った行を全部リストに残せばメモリは増える。ドライバーのバッファ方式と、処理後に何を保持するかを確認しよう。
カーソルは使わない方がいいこともある?
まとめ:ざっくりこれだけ覚えればOK!
「カーソル(DB)」って出てきたら「検索結果の位置を持ち、行を取り出す仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Cursor」 = 現在位置を示すもの
💬 画面では入力や操作の位置を示す言葉として使うよ。DBでは、クエリ結果のどの位置から行を取得するかを扱うんだ