如何将含(year*100+month)范围条件的SQL查询转换为Django ORM语句?
把SQL查询转换为Django ORM语句的解决方案
没问题,我来帮你把这条SQL转换成对应的Django ORM语句~
首先假设你的Django模型定义大概是这样的(如果模型名或字段名不一样,你对应调整就行):
from django.db import models class YourModel(models.Model): id = models.AutoField(primary_key=True) year = models.IntegerField() month = models.IntegerField() # 这里可以加其他你需要的字段
方法一:使用annotate创建临时字段
这种方式逻辑和你的SQL最贴近,先计算出year*100 + month的临时值,再筛选范围:
from django.db.models import F # 执行查询并获取指定字段 queryset = YourModel.objects.annotate( year_month=F('year') * 100 + F('month') ).filter( year_month__range=(201703, 201801) ).values('id', 'year', 'month')
方法二:直接在filter中使用表达式(更简洁)
你也可以跳过annotate,直接在筛选条件里写计算逻辑,Django会自动把它转换成对应的SQL:
from django.db.models import F queryset = YourModel.objects.filter( (F('year') * 100 + F('month')).range(201703, 201801) ).values('id', 'year', 'month')
两种方法最终生成的SQL都和你提供的查询逻辑一致,都会筛选出year*100 + month在201703到201801之间的记录,并且只返回id、year、month三个字段。
内容的提问来源于stack exchange,提问作者zelenov aleksey
相关产品推荐
相关产品推荐

