![](/img/trans.png)
[英]Django's ORM Model.objects.raw() query causes an infinite recursion error
[英]django Model.objects.raw returns SUM field as Decimal
我有一個定義如下的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時,它將返回一個小數而不是一個整數! 當然,事實發生后我可以將int轉換為int,但是我寧願以正確的方式進行操作。
還有其他人遇到過django raw()函數的這個未記錄的“功能”嗎? 是否有編寫sql的正確方法,以便它將int返回SUM()字段? 我了解我不需要在上面的示例中執行原始查詢,但是為了這個問題,我們僅假設我不能使用Foo.objects.aggregate()
Dunno(對於這個問題至關重要),但我的數據存儲區是MySQL 5.5
它是MySQL的功能,而不是django。 因此沒有在django中記錄。
從文檔中
對於數字參數,方差和標准偏差函數返回DOUBLE值。 SUM()和AVG()函數為精確值參數(整數或DECIMAL)返回DECIMAL值,為近似值參數(FLOAT或DOUBLE)返回DOUBLE值。 (在MySQL 5.0.3之前,SUM()和AVG()對於所有數字參數都返回DOUBLE。)
因此,結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.