django 模型查询

1.字段查询
exact:表示判等。

list = Article.objects.filter(id__exact=1)
可简写为:
list = Arcticle.objects.filter(id=1)

2.查询单一对象

Article.objects.get(pk=1)
注意:使用get()方法和使用filter()方法然后通过[0]的方式分片,有着不同的地方。看似两者都是获取单一对象。但是,如果在查询时没有匹配到对象,那么get()方法将抛出DoesNotExist异常。这个异常是模型类的一个属性,在上面的例子中,如果不存在主键为1的Entry对象,那么Django将抛出`Entry.DoesNotExist`异常。

类似地,在使用get()方法查询时,如果结果超过1个,则会抛出MultipleObjectsReturned异常,这个异常也是模型类的一个属性。

3.模糊查询
contains:是否包含

list = Article.objects.filter(btitle__contains='A')

startswith、endswith:指定值开头或结尾

list = Article.objects.filter(btitle_endswith="A")
#以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.

4.空查询
isnull:是否为null.

list = Article.objects.filter(title__isnull=False)

5.范围查询
in:是否包含在范围内

list = Article.objects.filter(id__in=[1,3,5])

6.比较查询
gt gte lt lte:大于、大于等于、小于、小于等于。

list = Article.objects.filter(id__gt=3)

不等于的运算符,使用exclude()过滤器。

list = Article.objects.exclude(id=3)

7.日期查询
year、month 、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

list = Article.objects.filter(create_time__year=2019)
list = Article.objects.filter(create_time__gt=date(2019,1,1)#查询2019年1月1日之后的数据)

8.F对象
两个属性做比较

例:查询阅读量大于等于评论量的文章。

from django.db.models import F
...
list = Article.objects.filter(vnum__gte=F('cnum'))

可以在F对象上使用算数运算。

例:查询阅读量大于2倍评论量的文章。

list = Article.objects.filter(bread__gt=F('bcomment') * 2)

Q对象

并且关系

例:查询阅读量大于20,并且编号小于3的文章。

list=Article.objects.filter(vnum__gt=20,id__lt=3)list=Article.objects.filter(vnum__gt=20).filter(id__lt=3)

例:查询阅读量大于20的文章,改写为Q对象如下。

from django.db.models import Q
...
list = Article.objects.filter(Q(vnum__gt=20))

例:查询阅读量大于20,或编号小于3的文章,只能使用Q对象实现

list = Article.objects.filter(Q(vnum__gt=20) | Q(id__lt=3))

例:查询编号不等于3的文章。

list = Article.objects.filter(~Q(pk=3))

聚合函数

使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg,Count,Max,Min,Sum,被定义在django.db.models中。

例:查询文章的总阅读量。

from django.db.models import Sum
...
list = Article.objects.aggregate(Sum('vnum'))

注意aggregate的返回值是一个字典类型,格式如下:

  {'聚合类小写__属性名':}:{'sum__vnum':3}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值