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()

你可能感兴趣的:(python)