Django笔记十四之统计总数/最新纪录和空值判断等功能

科技资讯 投稿 12200 0 评论

Django笔记十四之统计总数/最新纪录和空值判断等功能

    count
  1. in_bulk
  2. latest、earliest
  3. first、last
  4. exists
  5. contains、icontains
  6. gt、gte、lt、lte
  7. startswith、istartswith
  8. isnull

1、count

返回查询的 QuerySet 的总数。

Blog.objects.filter(name="hunter".count(

返回的结果直接是一个整数,类似的 SQL 代码如下:

select count(* from blog_blog where name = 'hunter';

2、in_bluk

返回一个 dict,key 为我们指定的字段名的值,value 为这个字段名所在 object 数据。

Blog.objects.in_bulk(["hunter", "jack"], field_name="name"

返回的数据如下:

{'hunter': <Blog: Blog object (1>, 'jack': <Blog: Blog object (2>}

但是需要注意,field_name 这个字段必须有唯一键的约束,即:

class Blog(models.Model:
    name = models.CharField(max_length=100, unique=True
    tagline = models.TextField(

不指定 field_name
如果不指定 field_name 的值的话,那么则会默认第一个参数列表的 value 值为 id:

Blog.objects.in_bulk([1, 2]

{1: <Blog: Blog object (1>, 2: <Blog: Blog object (2>}

不传参数

Blog.objects.in_bulk(

参数为空

Blog.objects.in_bulk([]

3、latest、earliest

latest( 和 earliest( 一样,都是按照指定字段排序后返回最新的,或者最早的一条数据,返回的是 model 的一个实例。

否则必须在 latest( 里指定字段。

entry_obj = Entry.objects.latest('pub_date

entry_obj = Entry.objects.latest('pub_date', '-expire_date'

系统会按照 pub_date 字段进行排序,然后返回最近的一条数据。

注意:这个操作和 get( 方法一样,如果表里不存在数据,使用 latest( 函数就会报错。

处理 null 值
不同的数据库对 null 值的处理是不一样的,mysql 对 null 的排序会比非null值更高,

Entry.objects.filter(pub_date__isnull=False.latest('pub_date'

latest( 是返回最新的一条数据

4、first、last

返回符合条件的第一条数据:

Entry.objects.first(

也可以加上filter 和 排序条件:

entry = Entry.objects.filter(id__gte=12.order_by("pub_date".first(

注意: 如果没有符合条件的数据,返回的结果可能是 None

5、exists

检测数据是否存在,返回布尔型结果。


is_exist = Blog.objects.filter(id=1.exists(

判断某种条件的数据是否存在,可以使用这种方式查询。

6、contains、icontains

contains 意思为包含指定字符串,用法如下:

Blog.objects.filter(name__contains="hunter"

对应的 SQL 为:

select * from blog_blog where name like binary '%hunter%'

因为 MySQL 中的 like 是忽略大小写的,所以通过 like binary 来强制不忽略大小写。

Blog.objects.filter(name__icontains="hunter"

上面的语句中,name 字段内容包含 Hunter、HUNTER、hUnTER 等任何中的都可以被匹配上,
对应的 SQL 为:

select * from blog_blog where name like '%hunter%'

7、gt、gte、lt、lte

gt: greater than,大于
gte: greater than or equal to 大于等于
lt: less than 小于
lte: less than or equal to 小于等于

Blog.objects.filter(id__gt=12

对应的 SQL 为:

select * from blog_blog where id > 12

8、startswith、istartswith

startswith 以指定字符串为开头,跟 python 里的用法类似

is_right = "abc".startswth("ab"

返回的 is_right 是一个 布尔型数据,表示是否以什么为开头。

Blog.objects.filter(name__startswith="hunter"

返回一个 QuerySet,对应的 SQL 是:

select * from blog_blog where name like binary 'hunter%'

startswith 是区分大小写的,istartswith 则是忽略大小写的用法

9、isnull

比如我们要取出 Enyry 表里所有 pub_date 字段为 null 的数据:

Entry.objects.filter(pub_date__isnull=True

如果是取出所有字段值不为空的数据:

Entry.objects.filter(pub_date__isnull=False

以上就是本篇笔记全部内容,下一篇笔记将介绍model 查询的范围和日期的筛选功能。

原文链接:Django笔记十四之统计总数、最新纪录和空值判断等功能

编程笔记 » Django笔记十四之统计总数/最新纪录和空值判断等功能

赞同 (72) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽