欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django将fetchall()返回的元组转化为字典

程序员文章站 2024-02-11 12:15:40
...

Django将fetchall()返回的元组转化为字典

Django中如果在视图函数中使用cursor调用原生SQL,当用fetchall()方法时会返回一个元组
((1,2),(2,3)……)
往往这样的数据类型是不好用的,需要转化为[{列名:值},{列名:值}……]这样的类型,可以使用如下方法进行转换:

1.首先获取每一列的列名,生成一个列表形如[‘列名1’,‘列名2’,’列名3‘…]
cursor.description是一个元组((列名,值1,值2…),(列名,值1,值2…),(列名,值1,值2…))使用for循环的方法获取它的第一个元素title[0],即列名。

2.创建一个空列表
3.for循环
4.使用zip函数,将列名列表title一一对应到值列表中item,这里title是列表,而item是元组,没关系,一样可以对应
title形如:[列名1,列名2,列名3]
item形如:(’1‘,‘a’, ’xx‘)
对应完成结果是个对象,需要转化为list,即list[zip(title,item)]

def getnumbybranch(request):
    par1=request.GET['id']
    cursor=connection.cursor()
    cursor.execute('select id,branch,count(distinct sbranch,count(distinct MACAdress) from pcassistant_Action group by branch')
    res1 = list(cursor.fetchall())   
    titile = [title[0] for title in cursor.description] #1
    res=[] #2
    for item in res1:  #3
         res.append(dict(list(zip(title,item)))) #4
    return HttpResponse(res)