如何将指定SQL查询转换为Django ORM语句?
对应的Django ORM写法
先假设你的Django模型对应数据库表dbp_istasyondata,模型名为DbpIstasyonData(如果你的模型名不同,替换成实际名称即可),可以这样实现你的SQL逻辑:
from django.db.models import Func, Value queryset = DbpIstasyonData.objects.values('datetime').annotate( parameters=Func( Func( Func(Value('parameter'), 'raw', function='json_build_object'), function='array_agg' ), function='array_to_json' ) ).order_by('datetime')
代码说明:
values('datetime'):对应SQL中的group by datetime,指定按datetime字段分组- 嵌套的
Func依次对应SQL里的函数调用:- 最内层
Func(Value('parameter'), 'raw', function='json_build_object'):调用PostgreSQL的json_build_object函数,将字段parameter和raw组合成JSON对象 - 中间层
Func(..., function='array_agg'):对每组生成的JSON对象执行array_agg聚合操作,得到对象数组 - 最外层
Func(..., function='array_to_json'):把聚合后的数组转换为JSON格式,对应SQL中的array_to_json
- 最内层
order_by('datetime'):对应SQL的order by 1,按datetime字段排序
如果需要直接获取包含datetime和parameters的字典列表,可以使用queryset.values('datetime', 'parameters'),或者直接遍历queryset获取每条结果。
内容的提问来源于stack exchange,提问作者Fırat Badur
相关产品推荐
相关产品推荐

