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

  • 相关阅读:
    转:IPhone之ASIFormDataRequest POST操作架构设计/ 处理网络超时问题
    LLDB和GDB比较
    为线程设置一个名字 [mythread setName:@"第一个子线程"];
    杀死一个线程
    ios 开发框架原始雏形 01
    iOS开发:设置应用程序图标和引导画面
    一个奇怪的现象 在GDB模式和LLDB 模式下 同样代码不同反应 AudioServicesCreateSystemSoundID
    iOS中GCD的魔力
    提升app 应用程序运行速度的几个常用方法
    IOS开发缓存机制之—本地缓存机制
  • 原文地址:https://www.cnblogs.com/mghhzAnne/p/12144741.html
Copyright © 2011-2022 走看看