sqlite3查询结果以字典形式返回
sqlite3查询结果以字典形式返回

sqlite3查询结果以字典形式返回

一、问题描述

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

使用fetchone返回的查询结果:

img

使用fetchall返回的查询结果:

img

二、解决方案

在创建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输出内容,返回的是数据库表的每个字段本身的信息:

img

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

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

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

img

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

发表回复

您的电子邮箱地址不会被公开。