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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值