一、问题描述
python的sqlite3接口直接使用fetchone或fetchall返回的结果是元组和元组列表,不能直观的看出每个元素对应的名称是什么,如下图所示:
使用fetchone返回的查询结果:

使用fetchall返回的查询结果:

二、解决方案
在创建sqlite3数据库连接获得conn句柄后,该句柄拥有一个属性row_factory,该属性控制着游标返回的结果形式
那我们就按照官方文档说明的样例修改该属性,使得返回结果为一个对象,该对象可以按名称访问到。
参考代码如下:
@staticmethod
def dict_factory(cursor, row):
# 将游标获取的数据处理成字典返回
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return d
def connect(self):
# 建立和数据库sample.db的连接
conn = sqlite3.connect(self.db_file)
# 使得查询结果以字典形式返回
conn.row_factory = SqliteUtils.dict_factory
# 创建游标以用于执行sql
cursor = conn.cursor()
return conn, cursor
查看dict_factory中的cursor.description输出内容,返回的是数据库表的每个字段本身的信息:

再次使用查询语句查看返回结果:
使用fetchone返回的查询结果,可以看到返回结果以字典形式展示:

使用fetchall返回的查询结果,fetchall返回的是一个list数组,每个元素都是一个dict字典:

demo样例:https://gitee.com/atiaisi/py_learn/blob/master/10_DataBaseOperation/10_01_sqlite.py
三、参考资料
python sqlite3官方文档:
https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.row_factory