我的django模型定义如下:
class Foo(models.Model):
bar = models.IntegerField(null=True)
baz = models.ForeignKey(Baz)
class Baz(models.Model):
bat = models.IntegerField(null=True)
我对它执行Foo.objects.raw()聚合查询,如下所示:
sql = """
SELECT -1 AS id,
SUM( foo.bar ) AS bar
FROM myapp_foo
LEFT JOIN myapp_baz ON foo.baz_id = baz.id
GROUP BY myapp_baz.id;
"""
aggregate_foo = Foo.objects.raw(sql)
哪一个都可以,但是当我访问aggregate_foo.bar时,它返回一个Decimal而不是int!当然,事实上我可以将条形码转换为int,但我宁愿以正确的方式做到这一点。
还有其他人遇到django raw()函数的这个未记录的“功能”吗?是否有正确的方法来编写sql,以便它将SUM()字段作为int返回?我理解我不需要在上面的例子中执行原始查询,但是我只是假设为了这个问题我不能使用Foo.objects.aggregate()
Dunno,如果它对这个问题至关重要,但我的数据存储区是MySQL 5.5
答案 0 :(得分:2)
这是MySQL的一个功能,而不是django。因此没有在django中记录。
对于数字参数,方差和标准差函数 返回DOUBLE值。 SUM()和AVG()函数返回DECIMAL 精确值参数的值(整数或DECIMAL)和DOUBLE 近似值参数的值(FLOAT或DOUBLE)。 (在MySQL之前 5.0.3,SUM()和AVG()为所有数字参数返回DOUBLE。)
因此结果。