Django之模型三

下面继续介绍数据库的一些应用:
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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿与代码

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值