繁体   English   中英

如何在Python中编写具有多个AND和OR的求和查询?

[英]How to write a query with many ANDs and ORs with sum in Python?

我正在尝试在Django / Python中编写以下查询:在此查询中,我没有简单的or ,但我也有许多and s和一个sum

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'])

尝试这个;

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'))

UPD

from django.db.models import Q

results = Category.objects.filter(
    Q(name="difficulty", key="hard") | Q(name= "success", key="yes") | 
    Q(name="alternative", key="yes")|Q(name="processing" AND key="good") | 
    Q(name="personal_touch",key="yes"))

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

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

问题:

  • 此外,无法使用参数提供列表
  • 查询速度较慢,因为无法使用索引

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM