我正在使用 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
最佳答案
以这种方式计数是没有意义的,因为 Value(0)
也将被计为 1。此外,你不需要自己过滤,Django 有办法在聚合函数中进行过滤,通过使用 filter=…
parameter [Django-doc] :
from django.db.models import Count, Q
Message.objects.values('type').annotate(
bot=Count('id'<b>, filter=Q(type='Outbound')</b>)
)
关于python - 如何解决django中注释的sql解码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59966064/