我使用的是Django 1.11和Postgresql 9.6 在我的應用程序中,有一個名爲Person的模型,它有幾個字段。在數據庫中,這是一個物化視圖。Django with Postgresql,列必須出現在GROUP BY子句中或用於聚合函數
class Person(models.Model):
personid = models.CharField(max_length=18, primary_key=True)
count = models.BigIntegerField()
native = models.CharField(max_length=2)
...
當執行
persons = Person.objects.values('personid', 'native')\
.annotate(total=Count('native'))
它說psycopg2.ProgrammingError: column "person.native" must appear in the GROUP BY clause or be used in an aggregate function
當只有選擇一列或沒有設置PERSONID作爲主鍵或不執行註釋也不會得到錯誤。
我打印查詢SQL:
SELECT
"person"."native",
"person"."personid",
COUNT("person"."native") AS "total"
FROM "person"
GROUP BY "person"."native", "person"."personid"
我能做些什麼?
我將視圖放入表中並將personid設置爲主鍵,然後沒有問題。
當您嘗試在'psql'殼(或任何其他的接口,它可以讓你直接發出查詢)此查詢會發生什麼,沒有任何的Django或Python? –
在psql shell中,它可以工作。所以我不知道爲什麼。 – imcmy
你能否排除Django發送的數據不是打印到數據庫的SQL? –