美文网首页
Django查询

Django查询

作者: Ancestor楠 | 来源:发表于2020-03-11 18:25 被阅读0次

    ‘’字段查询

    exact:表示判等。

    list=Article.objects.filter(id__exact=1)

    可简写为:

    list=Article.objects.filter(id=1)

    查询单一对象

    Article.objects.get(pk=1)

    注意

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

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

    模糊查询

    contains:是否包含。

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

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

    list=Article.objects.filter(btitle__endswith='哈哈')

    以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.

    空查询

    isnull:是否为null。

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

    范围查询

    in:是否包含在范围内。

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

    比较查询

    gt、gte、lt、lte:大于、大于等于、小于、小于等于。

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

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

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

    日期查询

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

    list=Article.objects.filter(create_time__year=2019)

    查询2019年1月1日后发表的文章。

    list=Article.objects.filter(create_time__gt=date(2019,1,1))

    F对象**

    两个属性做比较

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

    fromdjango.db.modelsimportF

    ...

    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对象如下。

    fromdjango.db.modelsimportQ

    ...

    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中。

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

    fromdjango.db.modelsimportSum

    ...

    list=Article.objects.aggregate(Sum('vnum'))

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

      {'聚合类小写__属性名':值}

      如:{'sum__vnum':3}

    相关文章

      网友评论

          本文标题:Django查询

          本文链接:https://www.haomeiwen.com/subject/vdjhjhtx.html