Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ProgrammingError必须出现在GROUP BY子句中或在聚合函数中使用_Python_Django_Postgresql_Group By - Fatal编程技术网

Python Django ProgrammingError必须出现在GROUP BY子句中或在聚合函数中使用

Python Django ProgrammingError必须出现在GROUP BY子句中或在聚合函数中使用,python,django,postgresql,group-by,Python,Django,Postgresql,Group By,给它任何基本的模型,比如说 class Post(models.Model): created = models.DateTimeField(auto_now_add=True) title = models.CharField(_('Title'), max_length=100) content = models.TextField(_('Content html'), max_length=65000) author = models.ForeignKey(

给它任何基本的模型,比如说

class Post(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(_('Title'), max_length=100)
    content = models.TextField(_('Content html'), max_length=65000)
    author = models.ForeignKey('user.User', on_delete=models.SET_NULL)
类似于
Post.objects.annotate(Count('id'))
(或任何字段,任何annotate())的查询失败,并出现以下错误:

ProgrammingError: column "post.created" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "post"."id", "post"."created", "post"."ti...
使用django 1.11.16和postgres 9.4.19

正如我在这里读到的,我尝试了不同的django版本和postgres版本;使用django 2.0、2.1.2和postgres 9.5。。同样的错误!环顾四周,我发现这可能是一个与SQL相关的问题,但我只在一台运行Ubuntu18.04(仿生)的服务器上遇到了这个问题。在Ubuntu 16.04、django 1.11.16或任何高于该版本和postgres 9.4或更高版本的本地运行查询在我的本地系统中运行良好。。所以这个问题实际上可能与一些低级库有关,也许,我没有运行复杂的查询,任何带有django 1.11+的简单annotate()在带有postgres 9.4或9.5的ubuntu 18.04中都会失败

[更新]
可能对您很有用,如果您发现自己处于这种情况下,对发生的事情没有任何线索,请验证正在讨论的表是否创建了索引。我的问题是
posts
表没有
PRIMARY KEY
定义,也没有任何其他约束,在
pg_restore
中失败,它还原了所有数据和一些架构定义,是的,你读对了一些其他架构定义丢失了,不知道为什么。。但是,我没有首先尝试调试
pg_restore
发生的事情,而是在一个空数据库上运行了一个初始的
python manage migrate
,因此这次正确创建并验证了模式(
psql-d-c'\d posts'
),然后使用
--仅数据
--禁用触发器
标志再次运行
pg\u restore
。。最后,我得到了正确恢复的模式和数据,查询工作正常。错误消息是因为当查询中有聚合函数时,PostgreSQL不会猜测如何处理未分组的列。这是Django-ORM手太多,让我们射中自己脚的情况之一


我在使用Django 2.1的项目上运行了一个测试,另一个使用1.11和
Model.objects.annotate(Count('id'))
的项目上运行了一个测试,没有任何问题。如果您发布完整的查询集,人们将能够进一步帮助您。

我遇到了问题,并解决了它。 您应该添加
.order\u by(“xxx”)
遵循您的ORM

之前:

search_models.Author.objects.values("first_institution", 'institution_code').annotate(counts=Count('first_institution'))
之后:

search_models.Author.objects.values("first_institution", 'institution_code').annotate(counts=Count('first_institution')).order_by('-counts')

它对我有用,也希望能帮助你。

你能发布
打印(post.objects.annotate(Count('id')).query)的输出吗?
?这将是来自查询集中的sql查询。在注释时对
id
s进行计数没有多大意义,因为每行包含一条记录,因此计数始终为1(或者
0
如果
NULL
@WillemVanOnsem:这是真的。但这并不能解释他们为什么会出现这个SQL错误。因此,您链接的问题的结论是,这个错误特定于数据库视图而不是数据库表支持的模型。如果您只在生产数据库中遇到这个错误,您应该调查e db schema并查找生产数据库和开发数据库之间的任何差异。嘿,伙计们,我将在这里更新我的问题;是的,据我目前所知,如果您确实在ID上有索引,则仅按ID分组而不引用SELECT的其他字段是有效的。由于某些奇怪的原因,在pg_还原后,结果是这样的(我未能发现)数据已恢复,但部分(并非全部)架构定义丢失..例如posts表没有主键语句,因此注释failsThanks@schillingt!是的,有时抽象层中有太多的魔力,这使得在极端情况下调试变得复杂:/I我想是什么问题,当使用pg_restore恢复转储时,表没有架构,数据在那里,但表没有索引,没有约束,主键..这就是导致此处查询失败的问题,为什么pg_restore无法还原某些*(不是全部)表的架构..不知道..在尝试调试pg_restore之前,设计了一种解决方法并按此方法进行