SQL查询“翻译”为Django会接受的查询,有人吗?请python

问题描述

任何人都可以将此MySQL查询“翻译”为Django链或Q()。这只是一个示例(但有效)查询,但是我想亲眼看看它,因为Django文档在这方面看起来并不友好,而且我无法使这些链和东西正常工作。>

MysqL -> SELECT position,COUNT(position) FROM    
      -> (SELECT * FROM log WHERE (aspect LIKE 'es%' OR brand LIKE '%pj%')
      -> AND tag IN ('in','out')) AS list
      -> GROUP BY position ORDER BY COUNT(position) DESC;

虽然我认为将来链接过滤器对我来说会更方便,但现在看来下面的方法更简单了。

query = "the query from above"

cursor.execute(query)

[new_list.append([item for item in row ]) for row in cursor]

...或者我应该退出()

解决方法

from django.db.models import Count,Q
myfilter = [Q(aspect__startswith="es")|Q(brand__contains="pj"),tag__in=['in','out']]
            #   condition 1           OR     condition2      AND     condition3
qry = Log.objects.filter(*myfilter).values('position').annotate({"count":Count('position')})
print(qry.values())

我认为也许使用django会得到相同的答案...无论如何我还是想关闭

我认为在情人眼中是更好还是不好

,
myfilter = Q(aspect__startswith="es") | Q(brand__contains="pj"),Q(tag__in=['in','out'])
qry = Log.objects.filter(*myfilter).values('position').annotate(Count('position')).order_by('-position__count')

必须在 myfilter 上的标记__in
括号之前添加 Q 没什么作用
annotate({“ count”:Count('position')})给出了错误 QuerySet.annotate()接收到非表达式
并以降序排序必须添加 .order_by('-position__count')
输出是字典,但是非常适合在网站上显示

所以你很亲近。现在数据与mysql输出匹配,并且我更好地了解了如何执行QuerySet和过滤器。谢谢