我使用的是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? –