0

我正在尝试使用Peewee ORM编写查询。查询应返回至少有一条消息与之关联的用户的所有名称。我目前尝试如下:

usersWithAtLeastOneMessage = User.select().where((fn.Count(User.messages) > 0)
for u in usersWithAtLeastOneMessage: 
    print u.name

我的模型看起来像这样:

class User(db.Model):
    name = CharField()

class Message(db.Model):
    user = ForeignKeyField(User, related_name='messages')
    text = TextField()

然而,这给了我以下错误:OperationalError: misuse of aggregate function Count().

不过,我完全迷路了。有人知道我该如何解决这个问题吗?欢迎所有提示!

4

2 回答 2

0

如果要按聚合过滤,则需要

a) 添加一个有效的group_by()子句

b) 在having()子句中进行过滤

User.select().group_by(User).having((fn.Count(User.messages) > 0)
于 2014-11-02T23:03:10.253 回答
0

尝试使用以下语句,它应该可以满足您的需求。

User.select().where(fn.Exists(Message.select().where(Message.user == User.id)))
于 2014-02-07T15:45:01.960 回答