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
相关推荐
数字智核3 分钟前
2026昆山工厂空压机突然停机怎么办?找谁抢修
服务器·网络·数据库
大模型丫丫23 分钟前
工业级 RAG 为什么需要 Elasticsearch?
elasticsearch·django·jenkins
AAA代码批发商24 分钟前
Days 39 Linux C 开发之 SQLite 数据库完整学习笔记
linux·c语言·数据库
笑梦无境24 分钟前
mysql的安装及配置(3)
数据库·mysql·adb
电商API_1800790524725 分钟前
跨境1688代采商家,如何借助API打通供应链,实现效率跃迁
大数据·数据库·网络爬虫
小雪崩26 分钟前
嵌入式学习 day40:数据库
数据库·学习
Aloudata44 分钟前
语义层 vs MCP 工具层:Agent 调用数据时,语义应该放在哪一层
数据库·数据分析·chatbi·data agent·语义层
zcmodeltech44 分钟前
源网荷储一体化沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的源网荷储、多能互补、冷热电三联供全场景联动方案,服务范围覆盖全国
数据库·人工智能·stm32·单片机·嵌入式硬件
数智启示录1 小时前
PostgreSQL 执行计划实战(第 9 篇):SQL 和索引没变,计划为什么突然慢一百倍
数据库·经验分享·sql·postgresql·面试
Gent_倪1 小时前
MySQL分库、分表、分区详解
数据库·mysql