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)