カテゴリ: Python 更新日: 2026/03/06

Pythonで取得結果を辞書形式で扱う方法を完全解説!fetchone・fetchallを初心者向けに理解しよう

Pythonで取得結果を辞書形式で扱う方法(fetchone・fetchall)
Pythonで取得結果を辞書形式で扱う方法(fetchone・fetchall)

先生と生徒の会話形式で理解しよう

生徒

「PythonでSQLの検索結果を取得したら、数字の並びになっていて分かりにくいです……」

先生

「それはタプル形式で受け取っているからですね。辞書形式で扱えるようにすると、とても読みやすくなります。」

生徒

「辞書形式って、キーと値で管理するやつですよね?」

先生

「その通りです。fetchoneやfetchallと組み合わせると、SQLの結果が直感的に扱えますよ。」

1. SQLの取得結果はそのままだと分かりにくい

1. SQLの取得結果はそのままだと分かりにくい
1. SQLの取得結果はそのままだと分かりにくい

PythonでSQLを実行し、データを取得すると、初期状態ではタプルという形式で返ってきます。タプルは順番で値を管理する仕組みなので、どの値がどの列なのかを覚えておく必要があります。これは、番号だけが書かれた表を見て内容を想像するようなもので、初心者には少し扱いづらい方法です。

2. fetchoneとfetchallの基本的な役割

2. fetchoneとfetchallの基本的な役割
2. fetchoneとfetchallの基本的な役割

fetchoneは検索結果から1行だけ取得するメソッドです。一方、fetchallはすべての行をまとめて取得します。どちらもSELECT文の結果を受け取るために使われますが、返ってくるデータの形が同じでも、件数が異なります。用途に応じて使い分けることが大切です。


cursor.execute("SELECT * FROM users")
row = cursor.fetchone()
rows = cursor.fetchall()

3. タプル形式の取得結果の特徴

3. タプル形式の取得結果の特徴
3. タプル形式の取得結果の特徴

タプル形式では、row[0]やrow[1]のように番号でデータを取り出します。例えば、名前がどの番号だったかを間違えると、意図しない値を扱ってしまいます。この方法は、列が増えるほどミスが起きやすくなります。


row = cursor.fetchone()
print(row[0])
print(row[1])

4. 辞書形式で扱うメリット

4. 辞書形式で扱うメリット
4. 辞書形式で扱うメリット

辞書形式で取得結果を扱うと、「列名:値」という形でデータを管理できます。これにより、順番を気にせずにデータを取り出せます。住所録で「名前」「電話番号」と項目名が付いている状態を想像すると分かりやすいでしょう。

5. sqlite3で辞書形式を使う設定方法

5. sqlite3で辞書形式を使う設定方法
5. sqlite3で辞書形式を使う設定方法

Pythonのsqlite3では、row_factoryという設定を使うことで、取得結果を辞書形式にできます。これを設定すると、fetchoneやfetchallの戻り値が、キー付きのデータとして扱えるようになります。


import sqlite3

conn = sqlite3.connect("sample.db")
conn.row_factory = sqlite3.Row
cursor = conn.cursor()

6. fetchoneで辞書形式のデータを取得する

6. fetchoneで辞書形式のデータを取得する
6. fetchoneで辞書形式のデータを取得する

設定後にfetchoneを使うと、1行分のデータを辞書のように扱えます。列名を指定して値を取得できるため、コードの意味が分かりやすくなります。


cursor.execute("SELECT id, name FROM users")
row = cursor.fetchone()
print(row["id"])
print(row["name"])

7. fetchallで複数行を辞書形式で扱う

7. fetchallで複数行を辞書形式で扱う
7. fetchallで複数行を辞書形式で扱う

fetchallを使うと、辞書形式のデータが複数行分まとめて取得できます。それぞれの行は辞書として扱えるため、同じキー名で値を参照できます。複数人の名簿を1枚ずつ確認するイメージです。


cursor.execute("SELECT id, name FROM users")
rows = cursor.fetchall()

for row in rows:
    print(row["id"], row["name"])

8. 初心者が覚えておきたい注意点

8. 初心者が覚えておきたい注意点
8. 初心者が覚えておきたい注意点

辞書形式を使うには、必ずrow_factoryの設定を先に行う必要があります。また、キーには列名を正確に指定しなければなりません。スペルミスがあるとエラーになるため、テーブル定義と同じ名前を使う意識が大切です。

カテゴリの一覧へ
新着記事
New1
Flask
Flask-RESTfulの基本!API開発をシンプルにする拡張機能の導入方法
New2
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New3
Flask
FlaskのAPI開発でテストを始めよう!初心者でもわかるpytestを使った基本テスト例
New4
Flask
Flaskのエラーページをカスタマイズする方法!404・500ページの作り方まとめ
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.2
Java&Spring記事人気No2
Python
Pythonのコメント活用術!初心者向けにTODO・FIXME・ドキュメンテーションコメントの書き方を完全解説
No.3
Java&Spring記事人気No3
Python
Pythonのbytes型とbytearray型とは?初心者向けにバイナリデータの扱い方を解説!
No.4
Java&Spring記事人気No4
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.5
Java&Spring記事人気No5
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
No.6
Java&Spring記事人気No6
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.7
Java&Spring記事人気No7
Flask
FlaskのSQLAlchemyでフィルタリング検索!filter, filter_byの使い方完全ガイド
No.8
Java&Spring記事人気No8
Python
Pythonで空白や不要な文字を削除する方法!strip(), rstrip(), lstrip() の使い方を初心者向けに解説