OneToMany Elixir 关系的按计数排序

发布于 2024-12-13 02:12:17 字数 429 浏览 3 评论 0原文

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

I am using Elixir for ORM but I have a problem trying to Order by a Relationship.

What I am trying to do is to get a list of users sorted by the number of posts they have. I have tried ways such as

User.query.join(User.posts).order_by(func.count(User.posts)).all()

without any success.

Here are my Elixir entities:

class User(Entity):
    username = Field(Unicode(100))
    posts = OneToMany('Post', inverse='user')


class Post(Entity):
    content = Field(Unicode(20000))
    user = ManyToOne('User')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月光色 2024-12-20 02:12:17

这是一个常见问题,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

this is a common question and an example query is in the ORM tutorial at: http://www.sqlalchemy.org/docs/orm/tutorial.html#using-subqueries . Just change where it says order_by(User.id) to say 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文