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'}
それとも自分でやらなければならないのでしょうか?
ベストアンサー1
使用できる行ファクトリードキュメントの例の通りです:
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"]
または、ドキュメント内のこの例のすぐ後に示されているアドバイスに従ってください。
タプルを返すだけでは不十分で、列への名前ベースのアクセスが必要な場合は、row_factory を高度に最適化された sqlite3.Row 型に設定することを検討してください。Row は、メモリ オーバーヘッドをほとんどかけずに、インデックス ベースと大文字と小文字を区別しない名前ベースの両方の列アクセスを提供します。これは、独自のカスタム ディクショナリ ベースのアプローチや db_row ベースのソリューションよりも優れている可能性があります。
2 番目のソリューションのコードは次のとおりです。
con = sqlite3.connect(…)
con.row_factory = sqlite3.Row # add this row
cursor = con.cursor()