如何使用Python中的sum编写带有多个AND和OR的查询?

时间:2015-10-14 08:51:19

标签: python mysql django django-queryset

我正在尝试在Django / Python中编写以下查询: 在此查询中,我没有简单的or,但我还有很多andsum

SELECT sum(value) FROM myapp_category
WHERE (name='difficulty' AND key='hard')
   OR (name= 'success' AND key='yes')
   OR (name= 'alternative' AND key='yes')
   OR (name= 'processing' AND key='good')
   OR (name= 'personal_touch' AND key='yes') `

这是我的模特:

class Category(models.Model):
   name = models.CharField(max_length=50)
   key = models.CharField(max_length=30)
   value = models.FloatField(blank=True, default=0)

   def __str__(self):
      return self.name.encode('utf_8') + "_" + self.key.encode('utf_8')

并且我不想使用原始sql,那么我可以使用什么呢?

更新答案: 谢谢你的回答,这是完整的答案:

    sum = Category.objects.filter(Q(name='difficulty',key=evaluation.difficulty) | 
Q(name='nogos',key=evaluation.nogos) | 
Q(name='success',key=evaluation.success) | 
Q(name='alternative',key=evaluation.alternative) | 
Q(name='processing',key=evaluation.processing) | 
Q(name='personal_touch',key=evaluation.personal_touch))
.aggregate(result=Sum('value'))

    score = float(sum['result'])

3 个答案:

答案 0 :(得分:1)

试试这个;

from django.db.models import Q, Sum


Category.objects.filter(Q(name='difficulty',key='hard') | Q(name='success',key='yes') | Q(name='alternative',key='yes') | Q(name='processing',key='good') | Q(name='personal_touch',key='yes')).aggregate(Sum('value'))

答案 1 :(得分:0)

<强> UPD

for(var i in result["array"]) {
    console.log(result["array"][i]["examsId"];
}

答案 2 :(得分:0)

不是真正的解决方案,但可能是其他想法的输入:

SELECT sum(value) FROM myapp_category
WHERE name+"/"+key IN (
  'difficulty/hard',
  'success/yes',
  'alternative/yes',
  'processing/good',
  'personal_touch/yes'
)

问题:

  • 也无法使用参数
  • 提供列表
  • 查询速度较慢,因为无法使用索引
相关问题