问题描述
任何人都可以将此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和过滤器。谢谢