Python django Model.objects.raw以十进制形式返回总和字段
我有一个django模型,定义如下:Python django Model.objects.raw以十进制形式返回总和字段,python,django,django-models,Python,Django,Django Models,我有一个django模型,定义如下: class Foo(models.Model): bar = models.IntegerField(null=True) baz = models.ForeignKey(Baz) class Baz(models.Model): bat = models.IntegerField(null=True) sql = """ SELECT -1 AS id, SUM( foo.bar ) AS bar
class Foo(models.Model):
bar = models.IntegerField(null=True)
baz = models.ForeignKey(Baz)
class Baz(models.Model):
bat = models.IntegerField(null=True)
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)
我对它执行Foo.objects.raw()聚合查询,如下所示:
class Foo(models.Model):
bar = models.IntegerField(null=True)
baz = models.ForeignKey(Baz)
class Baz(models.Model):
bat = models.IntegerField(null=True)
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时,它会返回一个十进制而不是int!当然,我可以在事后将bar转换为int,但我更愿意用正确的方法
还有其他人遇到过django raw()函数的这个未记录的“特性”吗?有没有合适的方法来编写sql,以便它将SUM()字段作为int返回?我知道在上面的例子中我不需要执行原始查询,但是为了这个问题,让我们假设我不能使用Foo.objects.aggregate()
不知道这对这个问题是否至关重要,但我的数据存储是MySQL 5.5,它是MySQL的一个特性,而不是django。因此,在django中没有记录 从 对于数值参数,方差和标准偏差函数 返回一个双精度值。SUM()和AVG()函数返回一个十进制数 精确值参数(整数或十进制)的值,以及双精度 近似值参数的值(浮点或双精度)。(MySQL之前) 5.0.3,SUM()和AVG()为所有数值参数返回双精度。) 结果就是这样