at backyard

Color my life with the chaos of trouble.

Pythonのsqlite3を用いてDBからの取得結果をdictで返すサンプルコード

タイトルのようなことをしたかったのだが、検索してみると理解が間違えている(?)日本語の記事が普通に検索結果上位に出てきたので、自分の方でも改めて記載しておくことにした。

fetchoneを使って指定したデータをdict形式で取得する方法

サンプルコードを下記に載せる。

# DBの取得結果をdict形式で返すサンプル
def get_item(id):
    conn = sqlite3.connect("foo.db")
    conn.row_factory = sqlite3.Row
    cur = conn.cursor()
    sql_statement = "select * from item where id=?"
    cur.execute(sql_statement, (str(id))) # idが数値型の場合、エラーになるので文字列に変換する
    
    # この時点では `sqlite3.Row object` として値が返ってきている。これはdictではないのでもうひと手間必要
    result = cur.fetchone()

    conn.close()

    # dict形式に変換してreturn
    return dict(result)

fetchallを使って取得したすべてのデータをdict形式で取得する方法

サンプルコードは下記。

# DBの取得結果すべてをdict形式で返すサンプル
def get_all_item():
    conn = sqlite3.connect("foo.db")
    conn.row_factory = sqlite3.Row
    cur = conn.cursor()
    cur.execute("select * from item")
    
    # dictの配列として格納
    result = [dict(row) for row in cur.fetchall()]
    
    conn.close()
    return result

以上となる。