小编imc*_*cmy的帖子

带有Postgresql的Django列必须出现在GROUP BY子句中,或者用在聚合函数中

我正在使用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)
    ...
Run Code Online (Sandbox Code Playgroud)

执行时

persons = Person.objects.values('personid', 'native')\
    .annotate(total=Count('native'))
Run Code Online (Sandbox Code Playgroud)

它说 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"
Run Code Online (Sandbox Code Playgroud)

我能做什么?

我将视图设置为表并将personid设置为主键,然后没有问题.

django postgresql

7
推荐指数
1
解决办法
1166
查看次数

标签 统计

django ×1

postgresql ×1