我在django中有一个名为MainData的数据模型,它是在名为“my_data”的表上创建的。 我想通过django API在这个表的顶部进行简单的计算。查询如下:
select main.id,
sum(main.num - secondary.num) as result
from (select * from my_data
where some_value > 10) as main,
my_data as secondary
where
main.id != secondary.id and
main.a > secondary.a
group by main.id
MainData模型具有所有相关字段(num,id,a和some_value)。 如何通过django实现此查询? (我试图避免使用直接SQL)
感谢您的帮助
答案 0 :(得分:0)
试试这个问题,看起来很相似:
答案 1 :(得分:0)
这是一个艰难的。 Django并没有真正提供一种简单的方法来连接表,而不需要使用SQL。这是我可以在不使用SQL的情况下提出的最好的方法。 results
变量中返回的结果与您提供的SQL查询相同;但是,执行效率稍差。
from django.db.models import Sum, Count
from your_app.models import MyData
results = []
for m in MyData.objects.filter(some_value__gt=10):
result = MyData.objects.filter(a__lt=m.a).aggregate(
count=Count('num'), sum=Sum('num'))
if result['count']:
results.append({
'id': m.id,
'result': result['count'] * m.num - result['sum']})
print results
你还应该看看Django为QuerySets
提供的extra()
和raw()
方法,它们可以让你在保持Djangoesque的同时高效地进行诸如你的复杂查询。