我正在使用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')
答案 0 :(得分:5)
这是一个常见问题,示例查询位于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