2014-02-03 5 views
0

Я пытаюсь написать запрос, используя Peewee ORM. Запрос должен возвращать все имена пользователей, у которых есть хотя бы одно сообщение, связанное с ними. Сейчас я стараюсь это следующим образом:Подсчет числа соединенных таблиц с использованием Peewee

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().

Я здесь полностью потерял. Кто-нибудь знает, как я могу это исправить? Все советы приветствуются!

ответ

0

Попробуйте использовать следующую инструкцию, которая должна делать то, что вы ищете.

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

Если вы хотите отфильтровать агрегатами, вам необходимо

а) добавить действующий group_by() пункт

б) сделать фильтрацию в предложении having()

как в

User.select().group_by(User).having((fn.Count(User.messages) > 0) 
Смежные вопросы