簡體   English   中英

django Model.objects.raw返回SUM字段為Decimal

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM