【发布时间】:2017-06-16 08:32:36
【问题描述】:
我正在使用 Django 1.11 和 Postgresql 9.6 在我的应用程序中,有一个名为 Person 的模型,它有几个字段。在数据库中,它是一个物化视图。
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"
我能做什么?
我把view做成table,把personid设置为主键,就没有问题了。
【问题讨论】:
-
当您在
psqlshell(或任何其他让您直接发出查询的界面)中尝试此查询时会发生什么? -
在 psql shell 中,它可以工作。所以我不知道为什么。
-
你能排除 Django 发送的 SQL 不是它打印到数据库的 SQL 吗?
-
是的,我打印并执行。
-
personid是主键。如果按此字段分组,则不会有任何影响。
标签: django postgresql