python3提取mysql数据并转化成字典数组
第一种方法,不用高级属性,自己硬写一个函数
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()