panco’s blog

興味が沸いたことを書く

'sqlite3.Row' の型変換

PythonSQL (SQLite3) の取得結果を使った処理するうえで、その取得結果を型変換する必要があった。どのように対処したか残しておく。
(やりたいことはできたのだけど、これが最適解なのかはわからない。。)

実行環境

参照するテーブルの状態

例として、users テーブルから任意の値を取得し、その結果を型変換する。
users テーブルの状態は以下の通り。

user_id user_name password user_role updated_at
1 panco pbkdf2:sha256:260000$aA42TAOrOJ1mYet1$16b8aa3305971337a49db43b1ff9624589d5963c10c546941ec7692ac36d0228 0 2023-10-14 16:39:08

ケース ① int 型への変換

やりたいこと

  • users テーブルのレコード数を取得し、その値を int 型で扱う

サンプルコード

hoge.py

import sqlite3

# DB 指定
DATABASE='pog-draft-project/pog.db'
# DB 接続
def connect_db():
    rv = sqlite3.connect(DATABASE)
    rv.row_factory = sqlite3.Row
    return rv

# int への変換
def get_int_data():
    # DB 接続
    con = connect_db()
    cur = con.cursor()
    sql = "SELECT count (*) FROM users WHERE user_name = 'panco'"
    res = cur.execute(sql).fetchone()
    # 変換前の値・型
    print(res)
    print(type(res))
    # map で str 変換してから int へ変換
    res_str = map(str, res)
    res = int(''.join(res_str))
    # 変換後の値・型
    print(res)
    print(type(res))

get_int_data()

実行結果

# 変換前の値・型
<sqlite3.Row object at 0x0000023B73C42E60>
<class 'sqlite3.Row'>
# 変換後の値・型
1
<class 'int'>

ケース ② str 型への変換

やりたいこと

  • users テーブルから user_name を取得し、その値を str 型で扱う

サンプルコード

hoge.py

import sqlite3

# DB 指定
DATABASE='pog-draft-project/pog.db'
# DB 接続
def connect_db():
    rv = sqlite3.connect(DATABASE)
    rv.row_factory = sqlite3.Row
    return rv

# str への変換
def get_str_data():
    # DB 接続
    con = connect_db()
    cur = con.cursor()
    sql = "SELECT user_name FROM users WHERE user_id = 1"
    res = cur.execute(sql).fetchone()
    # 変換前の値・型
    print(res)
    print(type(res))
    # str へ変換
    res = ''.join(res)
    # 変換後の値・型
    print(res)
    print(type(res))

get_str_data()

実行結果

# 変換前の値・型
<sqlite3.Row object at 0x0000024F34A13370>
<class 'sqlite3.Row'>
# 変換後の値・型
panco
<class 'str'>