#python #sqlalchemy #python-elixir
#python #sqlalchemy #python-elixir
Вопрос:
Я использую Elixir для ORM, но у меня есть проблема с попыткой упорядочить отношения.
То, что я пытаюсь сделать, — это получить список пользователей, отсортированных по количеству сообщений, которые у них есть. Я пробовал такие способы, как
User.query.join(User.posts).order_by(func.count(User.posts)).all()
без какого-либо успеха.
Вот мои объекты Elixir:
class User(Entity):
username = Field(Unicode(100))
posts = OneToMany('Post', inverse='user')
class Post(Entity):
content = Field(Unicode(20000))
user = ManyToOne('User')
Ответ №1:
это распространенный вопрос, и пример запроса приведен в руководстве по ORM по адресу: http://www.sqlalchemy.org/docs/orm/tutorial.html#using-subqueries . Просто измените место, где написано order_by(User.id ) чтобы сказать order_by(stmt.c.address_count):
>>> from sqlalchemy.sql import func
>>> stmt = session.query(Address.user_id, func.count('*').
... label('address_count')).
... group_by(Address.user_id).subquery()
>>> for u, count in session.query(User, stmt.c.address_count).
... outerjoin(stmt, User.id==stmt.c.user_id).order_by(stmt.c.address_count):
... print u, count
Комментарии:
1. Спасибо! Подзапросы — это действительно то, что я ищу.