如何从sqlite查询中获取字典?
问题内容:
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'}
还是我必须自己做?
问题答案:
您可以使用row_factory,如docs中的示例所示:
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的解决方案都要好。