【问题标题】:Order by Count of OneToMany Elixir Relationship按 OneToMany Elixir 关系计数排序
【发布时间】:2011-12-18 18:35:57
【问题描述】:

我正在将 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')

【问题讨论】:

    标签: python sqlalchemy python-elixir


    【解决方案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
    

    【讨论】:

    • 谢谢!子查询确实是我正在寻找的。​​span>
    猜你喜欢
    • 2019-10-25
    • 2021-01-25
    • 2011-10-14
    • 1970-01-01
    • 2012-02-25
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多