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
相关推荐
哈__6 小时前
时序数据库性能巅峰对决:金仓数据库在复杂场景下的技术突破与实战验证
数据库
WayserKON6 小时前
pg 窗口函数
数据库·postgresql
!chen6 小时前
Oracle回滚与撤销技术
数据库·oracle
总有刁民想爱朕ha6 小时前
Windows Server 2019部署PostgreSQL 14教程
数据库·windows·postgresql
聆风吟º6 小时前
时序数据战场巅峰对决:金仓数据库 VS InfluxDB深度解析
数据库·influxdb·kingbasees·金仓数据库
动亦定6 小时前
微服务中如何保证数据一致性?
java·数据库·微服务·架构
瀚高PG实验室6 小时前
timestampdiff (MYSQL)函数在Highgo DB中的写法
数据库·mysql·瀚高数据库
美人鱼战士爱学习7 小时前
RODI: Benchmarking Relational-to-Ontology Mapping Generation Quality
数据库
Austindatabases7 小时前
云数据库备份恢复验证,云数据库高端客户的需求说明
数据库
赵渝强老师7 小时前
【赵渝强老师】MongoDB的数据类型
数据库·mongodb·nosql