Django为Postgres生成了无效的SQL

4 投票
2 回答
892 浏览
提问于 2025-04-17 15:28

我是一名新手django用户,最近在使用Model.objects.all方法时遇到了一些麻烦。

我有一个用户模型:

class UsersModel(models.Model):
    password = models.CharField(max_length=MAX_PASSWORD_LENGTH)
    user = models.CharField(max_length=MAX_USERNAME_LENGTH, primary_key=True)
    count = models.IntegerField()

我还有一个测试方法,目的是删除用户表中的所有条目:

def function(self):
    UsersModel.objects.all().delete()

但不知道为什么,调用UsersModel.objects.all()时出现了错误:

DatabaseError: column "cs169proj1_usersmodel.user" must appear in the GROUP BY clause or 
be used in an aggregate function
LINE 1: SELECT "cs169proj1_usersmodel"."user", "cs169proj1_usersmode...

我在网上查了一下,发现这个特定的SQL错误只会在Postgresql(我正在使用的数据库)中出现。有没有人知道怎么解决这个问题?

2 个回答

2

我在把Django从1.6升级到1.9.8的时候,遇到了类似的问题,那个时候是在生产环境中使用PostgreSQL。

在我的情况下,问题是因为Django 1.9的更新要求至少使用PostgreSQL 9.1,具体情况可以在这里查看。

如果你需要更新PostgreSQL,RedHat/CentOS的更新指南可以在这里找到。

5

听起来列名count被误解成了聚合函数

最好的解决办法是:不要把保留字当作标识符使用。

撰写回答