如何解决Django中注释的sql解码错误

2024-06-26 10:44:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用mangodb数据库开发django框架

CRUD操作工作正常,但我面临注释查询接收错误的问题:

djongo.sql2mongo.SQLDecodeError: FAILED SQL: SELECT "app_message"."type", SUM(CASE WHEN "app_message"."type" = %(0)s THEN %(1)s ELSE %(2)s END) AS "bot" FROM "app_message" GROUP BY "app_message"."type"  LIMIT 21
Params: ('Outbound', 1, 0)
Version: 1.2.38
Message.objects.values('type').\
            annotate(bot=Count(Case(When(type="Outbound", then='id'), default=Value(0),
                                    output_field=IntegerField()),
                               ))

也尝试了1.2.31版,但没有成功

Python版本:3.6.1, Django版本:2.2.7


Tags: django版本框架数据库appmessageoutboundtype
2条回答

这样计算是没有意义的,因为Value(0)也将被计算为一。此外,您不需要自己进行过滤,Django可以使用^{} parameter [Django-doc]在聚合函数中进行过滤:

from django.db.models import Count, Q

Message.objects.values('type').annotate(
    bot=Count('id', filter=Q(type='Outbound'))
)

这是您可以做到的:

from django.db.models import Q, Sum, IntegerField

Message.objects.values('type').annotate(
     bot=Sum(Case(When(type="Outbound", then=1), 
     default=0,output_field=IntegerField()))
)

希望这有帮助

相关问题 更多 >