You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将包含位与运算的SQL查询语句转换为对应Django ORM代码

位与运算SQL转Django ORM实现方案

你给出的SQL是查询goods表中所有满足id与1按位与结果为1(也就是id为奇数)的记录id,对应Django ORM可以按版本选择以下实现方式:

Django 3.2及以上版本(推荐最简写法)

Django 3.2开始内置了__bitand位与查找表达式,直接写即可:

from yourapp.models import Goods

# 等效于SELECT id FROM goods WHERE (goods.id & 1) = 1
result = Goods.objects.filter(id__bitand=1).values_list("id", flat=True)

注意:如果你的模型没有显式指定表名,需要在Goods模型的Meta类中添加db_table = "goods",保证和你SQL中的表名对应。

Django 2.2 ~ 3.1版本

可以使用内置的BitAnd函数结合注解实现:

from django.db.models import F, Value
from django.db.models.functions import BitAnd
from yourapp.models import Goods

result = Goods.objects.annotate(
    bit_res = BitAnd(F("id"), Value(1))
).filter(bit_res=1).values_list("id", flat=True)

低于2.2的旧版本(应急写法,不推荐长期使用)

可以用extra方法直接写原生条件:

from yourapp.models import Goods

result = Goods.objects.extra(where=["(id & 1) = 1"]).values_list("id", flat=True)

extra方法已被Django官方标记为废弃,仅适合老项目临时兼容使用,有版本升级条件建议优先选前两种写法。

以上写法可以通用扩展到其他位与查询场景,只需要替换对应位与的数值即可。

内容的提问来源于stack exchange,提问作者realhuhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:18:03