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
相关推荐
一只大黄猫21 小时前
【数据库-入门2】基本概念
数据库
实泽有之,无泽虚之1 天前
MySQL主机因多次连接数据库错误而被阻塞
数据库·sql·mysql
Knight_AL1 天前
从自然语言到 SQL:为什么向量数据库是更好的选择
数据库·sql
Maybe I Simple1 天前
MySql 数据库分表 简单思路
数据库·php·webman
智航GIS1 天前
8.11 sys 模块
数据库·windows·microsoft
陈天伟教授1 天前
国产数据库快速入门《数据库技术原理及应用》(DM8)
数据库·数据挖掘
optimistic_chen1 天前
【Redis 系列】常用数据结构---SET类型
linux·数据结构·数据库·redis·set·数据类型·命令行
zbguolei1 天前
上传 Excel 文件进行数据库比对--增加导出功能
数据库·excel
amao99881 天前
数据库原理与技术 - 3-7 视图和索引 View& Index
数据库·sql·oracle
酸菜牛肉汤面1 天前
30、大表数据查询,怎么优化
数据库