当前位置: 首页 > 后端技术 > Python

DjangoNote14统计合计、最新记录、空值判断函数

时间:2023-03-26 15:00:59 Python

本篇笔记将介绍Django查询中统计合计、最新记录、空值判断等功能。countin_bulklatest,earliestfirst,lasexistscontains,icontainsgt,gte,lt,ltestartswith,istartswithisnull1,count返回查询的QuerySet的总数。比如你想查询Blog下name='hunter'的总数:Blog.objects.filter(name="hunter").count()直接返回一个整数。类似的SQL代码如下:selectcount(*)fromblog_blogwherename='hunter';2.in_bluk返回一个dict,key是我们指定的字段名的值,value是字段名所在的对象数据。例如,我们需要查询Blog模型下名字为“hunter”和“jack”的数据,可以这样实现:Blog.objects.in_bulk(["hunter","jack"],field_name="name")返回数据如下:{'hunter':,'jack':}但需要注意的是字段field_name必须有一个uniquekey约束,即:classBlog(models.Model):name=models.CharField(max_length=100,unique=True)tagline=models.TextField()doesnotspecifyfield_name如果不指定field_name的值,则第一个参数列表默认值为id:Blog.objects.in_bulk([1,2]){1:,2:}无参数如果函数中没有传递参数,则默认返回所有field_name="id"的数据:Blog.objects.in_bulk()参数为空如果函数中参数为空,则返回空:Blog.objects.in_bulk([])3、latest、earliestlatest()和earliest()是一样的,返回按指定字段排序后最新或最早的一条数据,并返回一个模型实例。前面提到,如果在模型的Meta中为get_latest_by指定了一个字段,那么可以不带参数使用latest(),默认按照get_latest_by的参数对数据进行排序。否则该字段必须在latest()中指定。用法如下:entry_obj=Entry.objects.latest('pub_date)entry_obj=Entry.objects.latest('pub_date','-expire_date')系统会按照pub_date字段排序,然后返回最新的一块数据。注意:此操作与get()方法相同。如果表中没有数据,使用latest()函数会报错。不同的数据库对空值的处理方式不同。Mysql对空值的排序高于非空值。因此,如果想排除mysql中的空值,可以在filter()中去掉这些数据:entry.objects.filter(pub_date__isnull=False).latest('pub_date')latest()是返回最新的一块ofdataearliest()是返回最旧的数据。4.first和last返回满足条件的第一条数据:entry.objects.first()也可以添加过滤和排序条件:entry=Entry.objects.filter(id__gte=12).order_by("pub_date").first()注意:如果没有符合条件的数据,返回结果可能是Nonelast()返回最后一条数据。5.exists检测数据是否存在,返回布尔结果。is_exist=Blog.objects.filter(id=1).exists()判断某个条件的数据是否存在,可以使用该方法查询。查询结果可以有多个,只要结果个数>=1,则返回True。6.contains,iconscontains表示包含指定字符串,用法如下:Blog.objects.filter(name__contains="hunter")对应SQL:select*fromblog_blogwherenamelikebinary'%hunter%'因为like在MySQL中大小写被忽略,所以使用likebinary来强制不忽略大小写。icontains的含义与contains相同,只是不区分大小写:在上面的Blog.objects.filter(name__icontains="hunter")语句中,name字段的内容包括Hunter、HUNTER、hUnter等。任意其中可以匹配到,对应的SQL为:select*fromblog_blogwherenamelike'%hunter%'7,gt,gte,lt,ltegt:大于,大于gte:大于等于大于等于lt:lessthan小于lte:lessthanorequaltolessthanorequalto的用法示例如下:Blog.objects.filter(id__gt=12)对应SQL:select*fromblog_blogwhereid>128,startswith,istartswithstartswith以指定的字符串开始,类似于python中的用法python用法:is_right="abc".startswth("ab")返回is_right是一个布尔数据,表示是否以某物开始。Django中的用法是:Blog.objects.filter(name__startswith="hunter")返回一个QuerySet,对应的SQL是:select*fromblog_blogwherenamelikebinary'hunter%'startswith区分大小写,忽略istartswith大小写用法9.isnull判断字段值是否为null。比如我们要取出Enyry表中所有pub_date字段为null的数据:Entry.objects.filter(pub_date__isnull=True)如果我们要取出所有字段值不为空的数据:Entry.objects.filter(pub_date__isnull=False)以上就是这个笔记的全部内容,下篇笔记会介绍模型查询的范围和日期的过滤功能。