让Sum()返回0而不是零

2024-06-16 11:10:41 发布

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

我试图用djangos orm执行一个查询,它返回一个部分在某个时间段内使用了多少个许可证。 我使用django1.8.3、python2.7.6和mysql作为数据库。在

我的查询与此类似:

beg = datetime.date(2015, 9, 1)
end = datetime.date(2015, 9, 9)
LicenseUsage.objects.all().filter(datestamp__range=[beg, end])\
                          .values('datestamp')\
                          .filter(groupid__in=[301, 274, 155, 186])\
                          .filter(poolid=301)\
                          .annotate(used=Sum('usedamount'))\
                          .order_by('datestamp')

结果包含datestamp和usedamount

^{pr2}$

我的问题是,如果某个分区在某一天没有使用许可证,我的查询不会返回任何内容。 i、 e.6号。2015年9月在我的成绩。在

我想执行一个查询

[{'datestamp': datetime.date(2015, 9, 1), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 2), 'used': 1},
 {'datestamp': datetime.date(2015, 9, 3), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 4), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 5), 'used': 1},
 {'datestamp': datetime.date(2015, 9, 6), 'used': 0}, # <--- This is what i want
 {'datestamp': datetime.date(2015, 9, 7), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 8), 'used': 2},
 {'datestamp': datetime.date(2015, 9, 9), 'used': 1}])    

我试着联合起来

LicenseUsage.objects.all().filter(datestamp__range=[beg, end])\
                          .values('datestamp')\
                          .filter(groupid__in=[301, 274, 155, 186])\
                          .filter(poolid=301)\
                          .annotate(used=Coalesce(Sum('usedamount'), V(0)))\
                          .order_by('datestamp')

但结果是一样的,看来我没弄好。 有人知道djangos orm是否可以进行这种查询,如果可能,如何解决它? 谢谢你的帮助,因为我快疯了。在

提前谢谢。在

比格斯


Tags: datetimedateobjectsormrangeallfilterused