zoukankan      html  css  js  c++  java
  • 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()

  • 相关阅读:
    Problem: 八中上厕所
    Problem: 最短路上的统计
    股票买卖问题
    Redis(十二)——Redis为什么是单线程的?
    链表题汇总
    Redis(十一)——集群模式
    Redis(十)——哨兵模式
    Redis(九)——主从复制
    Redis(八)——客户端与服务器
    Redis(七)——事件
  • 原文地址:https://www.cnblogs.com/mghhzAnne/p/12144741.html
Copyright © 2011-2022 走看看