1. ホーム
  2. python

[解決済み] sqliteクエリからdictを取得するにはどうすればよいですか?

2022-04-27 15:14:20

質問

db = sqlite.connect("test.sqlite")
res = db.execute("select * from table")

反復によって、行に対応するリストが得られます。

for row in res:
    print row

カラムの名前を取得することができます

col_name_list = [tuple[0] for tuple in res.description]

しかし、リストではなく、辞書を取得するための関数や設定はあるのだろうか?

{'col1': 'value', 'col2': 'value'}

それとも自分でやらなければならないのでしょうか?

どのように解決するのですか?

を使用することができます。 ロウファクトリー ドキュメントにある例のように。

import sqlite3

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d

con = sqlite3.connect(":memory:")
con.row_factory = dict_factory
cur = con.cursor()
cur.execute("select 1 as a")
print cur.fetchone()["a"]

または、この例のすぐ後に記載されているdocsのアドバイスに従ってください。

タプルを返すだけでは十分でない場合 への名前ベースのアクセスが必要であり カラムを設定することを検討してください。 row_factory には、高度に最適化された sqlite3.Rowタイプ。Rowは、以下の両方を提供します。 インデックスベースと大文字・小文字を区別しない 名前ベースのカラムアクセスで メモリのオーバーヘッドがほとんどない。これは おそらく、あなた自身の カスタムディクショナリベースのアプローチや db_rowベースのソリューションでも。

以下は、この2つ目のソリューションのコードです。

con.row_factory = sqlite3.Row