【问题标题】:Counts on joined tables using Peewee计数使用 Peewee 连接的表
【发布时间】:2014-02-03 16:56:58
【问题描述】:

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

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

【问题讨论】:

    标签: python mysql sql join peewee


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      喜欢

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

      【讨论】:

        猜你喜欢
        • 2015-02-18
        • 2018-05-28
        • 2014-03-27
        • 2023-03-13
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多