下面是Python查询Mysql时返回字典结构的完整攻略。
背景知识
在进行Python操作Mysql数据库时,常用的库有MySQLdb
和pymysql
等。这些库都提供了可以方便地将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
表中id
为1
的记录,并将结果转换为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
作为参数传递进去,即可查询到id
为1
的记录。