如何从Python中的SQLite3数据库查询构建字典列表?

jba*_*sta 2 python sqlite dictionary list-comprehension generator

在尝试dict从Python 2.x的SQLite3查询生成s 的列表时,我可以执行以下操作:

import sqlite3
cur = sqlite3.connect('filename.db').cursor()
query = cur.execute('SELECT * FROM A_TABLE')
colname = [ d[0] for d in query.description ]
result_list = []
for r in query.fetchall():
  row = {}
  for i in range(len(colname)):
    row[colname[i]] = r[i]
  result_list.append(row)
  del row

cur.close()
cur.connection.close()
print result_list
Run Code Online (Sandbox Code Playgroud)

这样,我尝试获取字典列表,每个键值对指示列名和行的分配值。

但是尽管工作并且可以合理理解,但嵌套for循环使我认为可能存在简化这一点的Python习惯用法-特别是对理解的一些巧妙使用。我怀疑也许可以求助于发电机,但是我仍然不太了解如何使用发电机。所以我问:有没有一种方法可以通过对生成器和/或字典的某种理解来“压缩”代码并获得预期的字典列表?

Dav*_*ess 5

尝试这个:

import sqlite3
cur = sqlite3.connect('filename.db').cursor()
query = cur.execute('SELECT * FROM A_TABLE')
colname = [ d[0] for d in query.description ]
result_list = [ dict(zip(colname, r)) for r in query.fetchall() ]
cur.close()
cur.connection.close()
print result_list
Run Code Online (Sandbox Code Playgroud)