LoginSignup
1
1

More than 1 year has passed since last update.

【Python】取得したSQLite3のデータを辞書型に整える方法

Posted at

PythonでSQLite3のデータを取得し、辞書型に整える方法を記載します。
辞書型は{ key : value }の構成にすることで情報の紐付けができるため、
どのような値なのかが分かりやすくなります。
今回はKeyをDBのカラム名、Valueは格納されているデータの値になります。

目指すゴール

以下のようなデータを作成します。

[
   { "id" : 1, "fruit" : "apple", "price" : 100 },
   { "id" : 2, "fruit" : "banana", "price" : 150 },
   { "id" : 3, "fruit" : "peach", "price" : 120 }
]

for文で扱いやすいようリスト型の中に辞書型が複数存在するデータを作成します。

データの準備

データを作成するスクリプトは以下になります。

insert.py
import sqlite3

db_name = 'test.db'

conn = sqlite3.connect(db_name)
cur = conn.cursor()
cur.execute('CREATE TABLE items(id INTEGER PRIMARY KEY AUTOINCREMENT, fruit STRING, price INTEGER)')

cur.execute('insert into items(fruit, price) values("apple", 100)')
cur.execute('insert into items(fruit, price) values("banana", 150)')
cur.execute('insert into items(fruit, price) values("peach", 120)')

conn.commit()
conn.close()

1つのデータを辞書型にする

いきなり複数データを処理するよりまず1つのデータで、
うまくいくか確認してからfor文で対応するようにします。

以下対応をします。

  • DBデータをselect文で取得する
  • selectしてきたデータをリスト型に変換する : fetchall関数
  • 2つのリストを辞書型に変換 : dict( zip( list1, list2 ) )
import sqlite3

dbname = 'test.db'
conn = sqlite3.connect(dbname)
cur = conn.cursor()
db_col = [ "id", "fruit", "price" ]
cur.execute('select * from items')
select_items = cur.fetchall()
result = dict(zip(db_col, select_items[0]))
print(result)

conn.close()

cur.execute('select * from items')でitemsテーブル内全データを取得します。
sqlite3の関数でfetchall関数で、select文を取得してデータをリスト型をして取得します。
dict(zip(db_col, select_items[0]))でdb_colのリストとfetcall()でリスト化したデータの1番目を辞書型に変換します。
以下が実行結果になります。

{'id': 1, 'fruit': 'apple', 'price': 100}

これで1つのデータを辞書型にできたので、これをfor文で複数データを辞書型にしていきます。

複数データを辞書型にする

for文で辞書型に変換し、リストに追加していきます。

import sqlite3

dbname = 'test.db'
conn = sqlite3.connect(dbname)
cur = conn.cursor()
db_col = [ "id", "fruit", "price" ]
cur.execute('select * from items')
select_items = cur.fetchall()
result_list = [] # 空のリストを作成
for item in select_items:
  d_item = dict(zip(db_col, item))
  result_list.append(d_item)

print(result_list)

conn.close()

select文で取得したデータをfor文で1つずつ辞書型に変換し、
result_list.appendで作成した空のリストに追加していきます。
以下実行結果

[
    {'id': 1, 'fruit': 'apple','price': 100}, 
    {'id': 2, 'fruit': 'banana', 'price': 150}, 
    {'id': 3, 'fruit': 'peach', 'price': 120}
]

参考サイト

https://qiita.com/drafts/8191896ea8577a0213aa/edit
https://note.nkmk.me/python-zip-usage-for/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1