DBのテーブルから列データをリストで取得する
DBのテーブルから列データをリストで取得する。fetch()で取得すると、行ごとのタプルのリストになっていて、処理しづらいので、ほしい列の値だけをリストにする関数get_one_column_data_list()を作成。
リストのメモリ確保のため、件数確認のget_countも作成。
get_one_column_data_list()は、リスト化したときの順番をソート済みで取得することも可能。
プログラム
import sqlite3 import random from faker import Faker def get_count(database, table_name): cur = database.cursor() sql_count = "SELECT COUNT (*) FROM {0}".format(table_name) d = cur.execute(sql_count).fetchone() # dは、(100,)のような形になっている cur.close() return d[0] def get_one_column_data_list(database, table_name, column_name, target_column_index=0, column_orderby=None): data_size = get_count(database, "data") data_list = [None]*data_size if column_orderby == None: sql_select = "SELECT {0} FROM {1}".format(column_name, table_name) else: sql_select = "SELECT {0} FROM {1} ORDER BY {2} asc".format( column_name, table_name, column_orderby) cur = database.cursor() d = cur.execute(sql_select) for index, row in enumerate(d): data_list[index] = row[target_column_index] cur.close() return data_list if __name__ == "__main__": con = sqlite3.connect(":memory:") con.isolation_level = None # None で自動コミットモード cur = con.cursor() cur.execute('PRAGMA temp_store=MEMORY;') cur.execute('PRAGMA journal_mode=MEMORY;') sql_create_table = "CREATE TABLE data(number INTEGER UNIQUE, name TEXT, score REAL)" sql_instert_data = "INSERT INTO data VALUES(?,?,?)" fake = Faker() listsize = 8 list_data = [None] * listsize print("データ準備 開始") for i in range(listsize): list_data[i] = [i, fake.name(), random.random()] print(list_data[i]) print("データ準備 完了") cur.execute(sql_create_table) cur.executemany(sql_instert_data, list_data) table_name = "data" column_name = "score" column_orderby = "name" data_list = get_one_column_data_list( con, table_name, column_name, target_column_index=0, column_orderby=column_orderby) print(data_list)
実行結果
>python C:\dev\SampleCodes\hello_sqlite\select_one_col.py データ準備 開始 [0, 'Taylor Smith', 0.6560666934413109] [1, 'Jesse Carrillo', 0.9199740526758551] [2, 'Tina Gonzalez', 0.8344908595983038] [3, 'Richard Mckinney', 0.1240783472168423] [4, 'Victoria Pace', 0.25291942565400816] [5, 'Steven Craig', 0.0703249952634678] [6, 'Valerie Mitchell', 0.0015255246599048533] [7, 'Victoria Hill', 0.9645617001034171] データ準備 完了 [0.9199740526758551, 0.1240783472168423, 0.0703249952634678, 0.6560666934413109, 0.8344908595983038, 0.0015255246599048533, 0.9645617001034171, 0.25291942565400816]