- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
本篇笔记将介绍一些 Django 查询中统计总数、最新纪录和空值判断等功能.
返回查询的 QuerySet 的总数.
比如想查询 Blog 下 name = 'hunter' 的总数:
Blog.objects.filter(name="hunter").count()
返回的结果直接是一个整数,类似的 SQL 代码如下:
select count(*) from blog_blog where name = 'hunter';
返回一个 dict,key 为我们指定的字段名的值,value 为这个字段名所在 object 数据.
比如我们需要查询 Blog 这个 model 下 name 为 "hunter", "jack" 的数据,可以如下实现:
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)>}
不传参数 。
如果函数里不传参数,则默认以 field_name="id" 返回所有数据:
Blog.objects.in_bulk()
参数为空 。
如果函数里的参数为空,则返回空:
Blog.objects.in_bulk([])
latest() 和 earliest() 一样,都是按照指定字段排序后返回最新的,或者最早的一条数据,返回的是 model 的一个实例.
前面介绍在 model 的 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() 函数就会报错.
处理 null 值 不同的数据库对 null 值的处理是不一样的,mysql 对 null 的排序会比非null值更高, 。
所以,在 mysql 中如果想排除掉 null 值,可以在 filter() 中去除这些数据:
Entry.objects.filter(pub_date__isnull=False).latest('pub_date')
latest() 是返回最新的一条数据 。
earliest() 则是返回最旧的一条数据.
返回符合条件的第一条数据:
Entry.objects.first()
也可以加上filter 和 排序条件:
entry = Entry.objects.filter(id__gte=12).order_by("pub_date").first()
注意: 如果没有符合条件的数据,返回的结果可能是 None 。
last() 则是返回最后一条数据.
检测数据是否存在,返回布尔型结果.
is_exist = Blog.objects.filter(id=1).exists()
判断某种条件的数据是否存在,可以使用这种方式查询.
查询的结果可以有多个,只要结果数 >= 1,返回即为 True.
contains 意思为包含指定字符串,用法如下:
Blog.objects.filter(name__contains="hunter")
对应的 SQL 为:
select * from blog_blog where name like binary '%hunter%'
因为 MySQL 中的 like 是忽略大小写的,所以通过 like binary 来强制不忽略大小写.
而 icontains 的含义和 contains 一致,不过是忽略大小写的:
Blog.objects.filter(name__icontains="hunter")
上面的语句中,name 字段内容包含 Hunter、HUNTER、hUnTER 等任何中的都可以被匹配上, 对应的 SQL 为:
select * from blog_blog where name like '%hunter%'
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
startswith 以指定字符串为开头,跟 python 里的用法类似 。
python 用法:
is_right = "abc".startswth("ab")
返回的 is_right 是一个 布尔型数据,表示是否以什么为开头.
Django 里的用法是:
Blog.objects.filter(name__startswith="hunter")
返回一个 QuerySet,对应的 SQL 是:
select * from blog_blog where name like binary 'hunter%'
startswith 是区分大小写的,istartswith 则是忽略大小写的用法 。
判断字段值是否为 null.
比如我们要取出 Enyry 表里所有 pub_date 字段为 null 的数据:
Entry.objects.filter(pub_date__isnull=True)
如果是取出所有字段值不为空的数据:
Entry.objects.filter(pub_date__isnull=False)
以上就是本篇笔记全部内容,下一篇笔记将介绍model 查询的范围和日期的筛选功能.
本文首发于本人微信公众号:Hunter后端 。
原文链接: Django笔记十四之统计总数、最新纪录和空值判断等功能 。
如果想获取更多相关文章,可扫码关注阅读:
最后此篇关于Django笔记十四之统计总数、最新纪录和空值判断等功能的文章就讲到这里了,如果你想了解更多关于Django笔记十四之统计总数、最新纪录和空值判断等功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
+--------+-------+----------+-----------+ | Maker | Model | SeatType | NoOfSeats | +--------+------
如何使用 jQuery 计算 p 标签之间的字符数? 我尝试: DEMO html: 1 1 1 js: var tBytes = 0, tFiles = $('b').length; fo
在 MongoDB 上运行正常的“查找”查询时,我可以通过在返回的游标上运行“计数”来获得总结果计数(不考虑限制)。因此,即使我将结果集限制为 10(例如),我仍然可以知道结果总数为 53(再次,例如
在 100% 堆叠条形图中,如何让数据标签同时显示值和总百分比?示例:129 (60.3%) 当您将鼠标悬停在栏上时,它会显示在工具提示中,但在栏本身上不可见。 此处示例:https://docs.g
我在Kibana中的总和有问题。 我的用例是,我的每个服务器都会定期报告打开的 session 数。在Kibana中,我想可视化所有服务器上所有 session 的总数。但是,即使只有一台服务器联机且
我正在使用 jQuery 和 ASP.NET MVC 3 以及 razor View 引擎。 我有几个可以在其中输入数值的文本框。我有一个标签控件,其中包含由 jQuery 计算的文本框总数。 我有以
像这样的结果: 75 Ansari 5 10 88 Koodoo 4 0 90 Koodoo 14 0 83 Koodoo 5 0
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我是 PHP 的初学者,我正在为我的网站编写一些代码。我想获得当时处于事件状态的 session 总数。我知道这是一项艰巨的任务,但有可能。我该怎么做? 我google了一下,有人说可以通过统计tem
1。问题陈述 我很难在正确的记录行中显示 COUNT() 的总数。 如何将 COUNT() 显示到正确的相应服务 2。背景 我想根据stage_id 和分解到project_name 显示员工负责的项
我整个下午都在尝试处理一个(或两个或三个)查询,以便获得三个表的所有子表的计数。看看我的设计: 用户表 id_user | name 1 | foo 2 | bar 获奖表 id_won | user
我有以下脚本。想要文件夹、子文件夹和文件的数量: Sub CountFiles(ByVal path1 As String) Dim fso As Object Dim subfolder As Ob
我对 c3.js 中的饼图有疑问。 如何在标题中添加饼图的总数? var title = new Array('data1.sql','data2.sql') var dtitle = new Arr
我在这方面玩得很开心。我正在尝试针对具有递归关系(分层)的表编写查询(使用 Oracle),并获取存储在树中每个节点及其下方的另一个表中的记录总数。另一个表只有与叶节点相关的记录。但是,我想获得树中每
有没有办法获取模块在任何时间点使用的绑定(bind)总数(通过模板的 {{ .. }}/ng-xxx="..." 、 $scope.$watch(...) 等)? 最佳答案 使用 document.g
我有一个非常简单的表格,因为我现在真的只是在玩 RoR,只是收集一些数据并将其插入数据库,没有什么令人兴奋的只是基本的 CRUD。但是,我想在表格的页脚中放置一个总和字段,但我在网上找不到任何接近的东
这个 mysql 查询给出了我的产品的销售数量(total 和total_staff),按一天中的天数和小时数分组。我想要每个产品的 total 和 total_staff 的总和(不按任何内容分组,
我正在尝试计算 For 循环中每个 user_name 赢得的总金额,并将其显示在 Amount Won: 之后。但是,当我运行下面的代码时,赢得金额后没有任何显示: - 它完全是空白的。我什至尝试将
我有 3 个表。产品价格、开票产品和订购产品的表格。我正在尝试创建一个连接这些的 View 。我想输出产品价格以及开票产品总数和订购产品总数。 产品价格 id season_id product
例如,我在另一个查询的 while 循环内的查询中有一个 mysql_num_rows 结果为 4,8,15,16,23,42。我的问题是如何计算 while 循环中的所有结果? (共 133 个)谢
我是一名优秀的程序员,十分优秀!