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_49393453几秒前
Chrome 75 不支持 arrayBuffer() 方法:替代方案详解
jvm·数据库·python
qq_37290693几秒前
MySQL数据库提示表损坏怎么修复_使用REPAIR TABLE修复方案
jvm·数据库·python
Absurd5871 分钟前
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
jvm·数据库·python
Yushan Bai1 分钟前
ORACLE数据库从WINDOWS环境迁移到LINUX环境并升级的方案步骤
数据库·oracle
2301_764150563 分钟前
HTML5中结合IDBKeyRange限制游标扫描的数据范围
jvm·数据库·python
Polar__Star5 分钟前
mysql如何快速判断两个数据库结构差异_使用mysqldiff工具.txt
jvm·数据库·python
雪碧聊技术5 分钟前
mysql表级锁的介绍
数据库·mysql
weixin_424999368 分钟前
Golang怎么写基准测试benchmark_Golang基准测试教程【完整】
jvm·数据库·python
升鲜宝供应链及收银系统源代码服务8 分钟前
系统菜单与按钮国际化升鲜宝多语言数据库设计演进对比文档(一)
数据库·多语言·生鲜配送·生鲜供应链管理系统·门店收银
2401_835956819 分钟前
PHP函数怎样读取CPU频率实时数据_PHP监控处理器主频变化【操作】
jvm·数据库·python