Python查询Mysql时返回字典结构的代码

  • Post category:Python

下面是Python查询Mysql时返回字典结构的完整攻略。

背景知识

在进行Python操作Mysql数据库时,常用的库有MySQLdbpymysql等。这些库都提供了可以方便地将Mysql返回数据转化为Python中的字典结构的方法。

实现过程

1. 安装需要的库

在开始之前,需要先确保安装了pymysql库,可以通过下面的命令进行安装:

pip install PyMySQL

2. 连接Mysql数据库

首先,需要通过pymysql库提供的connect方法连接到需要操作的数据库:

import pymysql

# 数据库连接信息
mysql_host = "localhost"
mysql_port = 3306
mysql_user = "root"
mysql_password = "123456"
mysql_db = "test"

# 关键字参数使用方式
conn = pymysql.connect(host=mysql_host, port=mysql_port, user=mysql_user, password=mysql_password, db=mysql_db)

这里使用了关键字参数的方式建立连接。

3. 查询操作

在建立好连接之后,可以通过cursor对象对数据库进行操作:

# 获取cursor
cursor = conn.cursor()

# 执行查询命令
sql = "SELECT * FROM user"
cursor.execute(sql)

# 获取所有查询结果
results = cursor.fetchall()

这里使用了fetchall方法,它会将所有查询结果存储到一个元组中,并返回这个元组。

4. 结果转换

将查询结果转换为Python字典结构,可以使用zip函数将查询结果的列名和行值一一对应,并使用dict函数将它们转换为字典:

# 获取查询结果的列名
columns = [column[0] for column in cursor.description]

# 将结果转换为行列表,并将每一行转换为字典
rows = []
for row in results:
  row_dict = dict(zip(columns, row))
  rows.append(row_dict)

# 打印查询结果
print(rows)

这里的columns变量获取了查询结果的列名,row_dict变量使用zip函数将列名和行值一一对应,再将它们转换为字典,存储到rows列表中,最终将所有的行字典存储在rows变量中。打印rows变量即可得到查询结果。

5. 关闭连接

关闭数据库连接是很重要的一步,可以使用close方法来关闭连接:

# 关闭连接
conn.close()

示例说明

下面提供两个示例说明:

示例一

查询test数据库中user表的所有记录,并将结果转换为Python字典结构:

import pymysql

# 数据库连接信息
mysql_host = "localhost"
mysql_port = 3306
mysql_user = "root"
mysql_password = "123456"
mysql_db = "test"

# 建立连接
conn = pymysql.connect(host=mysql_host, port=mysql_port, user=mysql_user, password=mysql_password, db=mysql_db)

# 获取cursor
cursor = conn.cursor()

# 执行查询命令
sql = "SELECT * FROM user"
cursor.execute(sql)

# 获取所有查询结果
results = cursor.fetchall()

# 获取查询结果的列名
columns = [column[0] for column in cursor.description]

# 将结果转换为行列表,并将每一行转换为字典
rows = []
for row in results:
  row_dict = dict(zip(columns, row))
  rows.append(row_dict)

# 打印查询结果
print(rows)

# 关闭连接
conn.close()

示例二

查询test数据库中user表中id1的记录,并将结果转换为Python字典结构:

import pymysql

# 数据库连接信息
mysql_host = "localhost"
mysql_port = 3306
mysql_user = "root"
mysql_password = "123456"
mysql_db = "test"

# 建立连接
conn = pymysql.connect(host=mysql_host, port=mysql_port, user=mysql_user, password=mysql_password, db=mysql_db)

# 获取cursor
cursor = conn.cursor()

# 执行查询命令
sql = "SELECT * FROM user WHERE id = %s"
cursor.execute(sql, 1)

# 获取所有查询结果
results = cursor.fetchall()

# 获取查询结果的列名
columns = [column[0] for column in cursor.description]

# 将结果转换为行列表,并将每一行转换为字典
rows = []
for row in results:
  row_dict = dict(zip(columns, row))
  rows.append(row_dict)

# 打印查询结果
print(rows)

# 关闭连接
conn.close()

其中,sql语句中的%s表示需要传递参数的地方,使用cursor.execute()的时候,将1作为参数传递进去,即可查询到id1的记录。