【python】sqlite3查询结果以字典形式返回
阿提艾斯
2022年08月21日 18:45
收录于文集
共45篇

一、问题描述

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

使用fetchone返回的查询结果:

fetchone返回的查询结果

使用fetchall返回的查询结果:

fetchall返回的查询结果

二、解决方案

在文章【python】sqlite3基础使用​中有python使用sqlite3的基础知识,在创建sqlite3数据库连接获得conn句柄后,该句柄拥有一个属性row_factory,该属性控制着游标返回的结果形式,那我们就按照官方文档说明的样例修改该属性,使得返回结果为一个对象,该对象可以按名称访问到。

参考代码如下:

代码块
Python
自动换行
复制代码
@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输出内容,返回的是数据库表的每个字段本身的信息:

cursor.description

再次使用查询语句查看返回结果:

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

fetchone

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

fetchall

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