使用Peewee对连接表进行计数

时间:2014-02-03 16:56:59

标签: python mysql sql join peewee

我正在尝试使用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()

但是我完全迷失在这里。有谁知道我怎么解决这个问题?欢迎所有提示!

2 个答案:

答案 0 :(得分:0)

尝试使用以下语句,该语句可以执行您要查找的内容。

User.select().where(fn.Exists(Message.select().where(Message.user == User.id)))

答案 1 :(得分:0)

如果您想按聚合进行过滤,则需要

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

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

喜欢

User.select().group_by(User).having((fn.Count(User.messages) > 0)