第一种方法,不用高级属性,自己硬写一个函数
import pymysql
db=pymysql.connect(host="",user="",passwd="",db="",post=3306,charset="utf8");
str="select * from db1 where usrID="";";
cursor=db.cursor()
try:
cursor.excute(str)
index=cursor.description #列描述
result=[]
db.commit()
for res in cursor.fetchall(): #返回的全部结果
row={}
for i in range(len(index)-1):
row[index[i][0]]=res[i]
result.append(row) #result是最后要的dict数组
except:
db.rollback()
cursor.close()
db.close()
第二种方法,这种方法涉及到列表的嵌套函数,但是最好用的
import pymysql
db=pymysql.connect(host="127.0.0.1", user="root", password="",
database="data", port=3306, charset='utf8',)
str="select * from userinfo ;"
#str="select * from userinfo where certificate_no='20200317001' ;"
cursor=db.cursor()
try:
cursor.execute(str)
desc = cursor.description # 获取字段的描述
data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()] # row是数据库返回的一条一条记录,外侧的这个for是大循环,里边的for提取了数据列描述, #和一条数据合成一个字典,外侧循环将多条记录循环成字典数组
print(data_dict)
except:
db.rollback()
cursor.close()
db.close()
第二种方法更好理解的写法
import pymysql
db=pymysql.connect(host="127.0.0.1", user="root", password="",
database="data", port=3306, charset='utf8',)
str="select * from userinfo ;"
#str="select * from userinfo where certificate_no='20200317001' ;"
cursor=db.cursor()
try:
cursor.execute(str)
result=cursor.fetchall()#所有结果
column=[index[0] for index in cursor.description ]# 列名
data_dict = [dict(zip(column, row)) for row in result] # row是数据库返回的一条一条记录,其中的每一天和column写成字典,最后就是字典数组
print(data_dict)
except:
db.rollback()
cursor.close()
db.close()
第三种方法用迭代函数,这个既不如第一个,也不如第二个,有点不伦不类了
import pymysql
db=pymysql.connect(host="",user="",passwd="",db="",post=3306,charset="utf8");
str="select * from db1 where usrID="";";
cursor=db.cursor()
def new2dict(new): #迭代函数
return dict(zip([x[0] for x in cursor.description],[x for x in new])) #zip函数
try:
cursor.excute(str)
news_list=list(map(new2dict,cursor.fetchall())) #news_list是转换后的dict数组 这里有map函数
except:
db.rollback()
cursor.close()
db.close()