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 分钟前
Redis中set类型以及应用场景
数据库·redis·缓存
kexnjdcncnxjs9 分钟前
SQL批量删除不同条件的记录_使用IN子句简化删除逻辑
jvm·数据库·python
liux35289 分钟前
Kafka 4.1.1 生产环境调优与最佳实践指南
数据库·分布式·kafka
2303_8212873812 分钟前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
jvm·数据库·python
m0_6091604914 分钟前
React Flow 边缘错位与消失问题的根源分析与 Hooks 重构方案
jvm·数据库·python
weixin_4440129315 分钟前
CSS怎样调整弹性项目排列顺序_使用order属性轻松控制DOM显示顺序
jvm·数据库·python
l1t15 分钟前
DeepSeek总结的PostgreSQL 18.4, 17.10, 16.14, 15.18 和 14.23 发布
数据库·postgresql
silver988616 分钟前
MongoDB 和 cassadra
数据库·mongodb
iuvtsrt17 分钟前
SQL处理分组聚合时的NULL值处理_利用NVL函数
jvm·数据库·python
qq_2975746719 分钟前
MySQL核心技术实战系列(第一篇):MySQL零基础入门:安装、配置与客户端工具使用 一、前言
数据库·mysql·adb