Django之模型三

来源:互联网 发布:全职代放淘宝浏览单 编辑:程序博客网 时间:2024/05/19 12:26
下面继续介绍数据库的一些应用:
Values获取字典形式的结果。
ret=Person2.objects.values('name','age')

结果如下,可以看到类型其实还是QuerySet还不是字典的形式



可以先将类型转成List的形式。
ret=list(Person2.objects.values('name','age'))[0]


Values_list获取元组形式结果

Annotate进行聚合,计数,平均数,求和等
首先我们来看下有多少个对象:
定义查询所有的函数:

def show_all(request):

    info_dict={}    all=Person2.objects.all()    for a in all:        info_dict[a.name]=a.age    return render(request,'index.html',{'all_info':info_dict})
反馈如下:可以看到有3个对象,年龄分别是32,20,30
下面首先来计算人物的个数:
首先引入模块:django.db.models里面包含所有的计算函数
from django.db.models import *
def inquery_by_annotate(request):    ret=Person2.objects.all().values('name').annotate(count=Count('name')).values('name','count')    return render(request,'index.html',{'ret':ret})
上面的代码统计每个名字出现的次数。Annotate代表以某个元素进行聚类的意思。这里是以每个名字的次数进行聚类。返回结果如下。可以看到出现的次数都是1

假设我们建立多个名字叫zhf的人但是年龄不一样。那么看下得到的结果是什么。如下建立了3个名字叫zhf的,但是年龄分别是30,28,30

再次查询得到如下结果:可以看到zhfcount变成了3

我们还可以通过聚类求平均,如下:
ret=Person2.objects.all().values('name').annotate(avg=Avg('age')).values('name','avg')

单看这个函数比较难以理解,我们来看下对应的sql代码是多少:
ret=Person2.objects.all().values('name').annotate(avg=Avg('age')).values('name','avg').query
从下面的sql就比较明确了。从person2中根据name进行分组,然后求出平均年龄


0 0
原创粉丝点击