Python で SQL (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'>