MySQL 如何在Python中使用mysqlDB和SQLite将数据库查询的结果转换为字典

MySQL 如何在Python中使用mysqlDB和SQLite将数据库查询的结果转换为字典

阅读更多:MySQL 教程

介绍

本文将介绍如何在Python中使用mysqlDB和SQLite将数据库查询的结果转换为字典。在实际的应用场景中,我们往往需要将数据库中获取的数据进行进一步的数据处理和分析。使用字典的数据结构来存储和操作数据库查询结果,将能够更好地满足我们的数据分析需求。

mysqlDB

mysqlDB是Python中的一个第三方库,可用来操作MySQL数据库。首先,需要安装mysqlDB库。可以通过pip来进行安装:

pip install mysql-connector-python
Mysql

连接MySQL数据库后,查询结果可以使用游标(cursor)对象来操作。

将查询结果转换为字典的方法有两种:

使用字段名

首先介绍一种使用字段名转换为字典的方法。先来看一个简单的例子,假设我们有一个student表,包含id、name、age三个字段。

查询student表的所有记录,如下所示:

import mysql.connector

config = {
    'user': 'username',
    'password': 'password',
    'host': 'localhost',
    'database': 'test'
}

conn = mysql.connector.connect(**config)
cursor = conn.cursor()

sql = 'SELECT * FROM student'
cursor.execute(sql)

rows = cursor.fetchall()
print(rows)
Python

结果如下:

[(1, 'Tom', 20), (2, 'Jerry', 21), (3, 'John', 22), (4, 'Kate', 20)]
Mysql

我们将查询结果中的每一条记录作为一个字典来存储,字典的key为字段名,value为该记录中对应的字段值。

def row_to_dict_desc(cursor, row):
    """
    Transform a row into a dictionary with keys equal to the description keys
    """
    desc = cursor.description
    dict_row = {}
    for i in range(len(row)):
        dict_row[desc[i][0]] = row[i]
    return dict_row

resp = []
for row in rows:
    row_dict = row_to_dict_desc(cursor, row)
    resp.append(row_dict)
Python

运行以上代码,输出结果如下:

[
    {'id': 1, 'name': 'Tom', 'age': 20},
    {'id': 2, 'name': 'Jerry', 'age': 21},
    {'id': 3, 'name': 'John', 'age': 22},
    {'id': 4, 'name': 'Kate', 'age': 20}
]
Mysql

使用描述

使用上述方法可以将查询结果转换为字典,但是在结果中包含了所有的字段,尽管有些时候我们并不需要全部的字段。一种更加高效的实现方法是,使用查询语句中的描述来决定要将哪些字段加入到字典中。

def row_to_dict(cursor, row):
    """
    Transform a row into a dictionary using description information as the keys
    """
    dict_row = {}
    for i, column in enumerate(cursor.description):
        dict_row[column[0]] = row[i]
    return dict_row

cursor.execute("""
    SELECT id, name, age
    FROM student;
""")

resp = []
for row in cursor.fetchall():
    row_dict = row_to_dict(cursor, row)
    resp.append(row_dict)
Python

输出结果和上面是一样的:

[
    {'id': 1, 'name': 'Tom', 'age': 20},
    {'id': 2, 'name': 'Jerry', 'age': 21},
    {'id': 3, 'name': 'John', 'age': 22},
    {'id': 4, 'name': 'Kate', 'age': 20}
]
Mysql

SQLite

SQLite是一个轻量级的关系型数据库,完全兼容SQL标准,常用于移动设备、嵌入式设备以及小型网站等领域。由于SQLite没有独立的服务器进程,也不需要安装配置,所以非常适合嵌入到应用程序中使用。

在Python中,使用SQLite也非常方便,Python标准库中就内置了SQLite的支持。

使用SQLite来查询并将结果转换为字典的方法与mysqlDB类似。下面,我们依然以student表为例演示SQLite的使用:

import sqlite3

conn = sqlite3.connect('test.db')
cursor = conn.cursor()

sql = 'SELECT * FROM student'
cursor.execute(sql)

rows = cursor.fetchall()
print(rows)
Python

输出结果如下:

[(1, 'Tom', 20), (2, 'Jerry', 21), (3, 'John', 22), (4, 'Kate', 20)]
Mysql

接下来,我们将查询结果转换为字典,同样有两种实现方式。

使用字段名

使用SQLite时,cursor的description属性并没有用于存储字段名,因此我们需要查找每个字段在结果中所对应的位置。在这种方式下,我们需要先查询出表的所有字段,然后再根据查询结果中的值和字段名构建字典。

def row_to_dict_desc(cursor, row):
    """
    Transform a row into a dictionary with keys using description information
    """
    dict_row = {}
    for i, column in enumerate(cursor.description):
        dict_row[column[0]] = row[i]
    return dict_row

# 查询字段名
cursor.execute("SELECT * FROM student")
fields = [f[0] for f in cursor.description]

# 将结果转换为字典
resp = []
for row in rows:
    row_dict = dict(zip(fields, row))
    resp.append(row_dict)
Python

输出结果和之前一样:

[
    {'id': 1, 'name': 'Tom', 'age': 20},
    {'id': 2, 'name': 'Jerry', 'age': 21},
    {'id': 3, 'name': 'John', 'age': 22},
    {'id': 4, 'name': 'Kate', 'age': 20}
]
Mysql

使用索引

除了使用字段名外,我们还可以通过使用索引来获取查询结果中每一列的值。这种方式下,我们需要事先知道每一列所对应的位置。

def row_to_dict(cursor, row):
    """
    Transform a row into a dictionary using index as keys
    """
    dict_row = {}
    for i, column in enumerate(row):
        dict_row[i] = column
    return dict_row

cursor.execute("""
    SELECT id, name, age
    FROM student;
""")

resp = []
for row in cursor.fetchall():
    row_dict = row_to_dict(cursor, row)
    resp.append(row_dict)
Python

输出结果:

[
    {0: 1, 1: 'Tom', 2: 20},
    {0: 2, 1: 'Jerry', 2: 21},
    {0: 3, 1: 'John', 2: 22},
    {0: 4, 1: 'Kate', 2: 20}
]
Mysql

一般来说,使用字段名的方式比起使用索引更加直观易懂。

总结

在Python中使用mysqlDB和SQLite操作数据库,并将查询结果转换为字典,可以更加便捷地进行数据处理和分析。根据需要,我们可以使用字段名或者索引来获取查询结果中的每一列,实现将查询结果转换为字典的功能。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册