django orm的Q和~Q的数据相加并不一定等于总数

以下代码纯粹是为了举例子,并假设sex性别字段可以为NULL, 实际上不会这么写

python 复制代码
all_count = Students.objects.all().count()  # 1000

# 男性数量
male_count = Students.objects.filter(sex='男')  #  600
# 非男性数量
female_count = Students.objects.filter(~Q(sex='男'))  #  300

本义是获取非男性的学生数量, 但是发现他们加起来的数量并不是总数1000,

于是定位问题,发现存在为NULL的情况,性别信息缺失导致该字段可能为NULL, 在sql语句中,NULL不是一个实际的值,它不能直接用于比较操作,如使用=号判断,如果你想检查一个字段是否为NULL,你应该使用IS NULL 或 IS NOT NULL来判断统计,而在Django orm中可以做如下修改:

非男性数量

python 复制代码
female_count = Students.objects.filter(~Q(sex='男') | Q(sex=None))  # 400
相关推荐
m0_674294641 分钟前
HTML怎么限制输入字符数_HTML input maxlength属性用法【详解】
jvm·数据库·python
maqr_1107 分钟前
layui table单元格编辑 layui表格如何实现可编辑
jvm·数据库·python
z44247532611 分钟前
HTML函数开发用旋转屏有优势吗_特殊硬件形态适配说明【方法】
jvm·数据库·python
2501_9142459334 分钟前
SQL如何统计分组内满足条件的唯一项_COUNT与DISTINCT
jvm·数据库·python
chen_ever34 分钟前
Redis详解|从基础到面试高频题
数据库·redis·后端·缓存
弱水三千 只取一瓢饮35 分钟前
sqlserver 从数据库A的备份文件,还原到数据库B中
数据库·sqlserver
池佳齐36 分钟前
软考高级系统架构设计师备考(十八):数据库系统—事务管理与并发控制
数据库·oracle·系统架构
数智化精益手记局36 分钟前
8d报告案例分析:拆解8d报告案例分析的8个步骤,解决生产现场重复发生的质量难题
大数据·数据结构·数据库·人工智能·精益工程
qq_1898070341 分钟前
C#怎么操作数据库存储过程 C#如何调用SQL Server存储过程传参并获取返回结果【数据库】
jvm·数据库·python
m0_746752301 小时前
HTML5视频标签针对不同设备DPR的资源选择逻辑
jvm·数据库·python