pony.orm按最新实体关系排序

时间:2016-07-21 21:11:23

标签: python ponyorm

假设我将这些表格映射为pony.orm

class Category(db.Entity):
    threads = Set("Thread")

class Thread(db.Entity):
    category = Required("Category")
    posts = Set("Post")

class Post(db.Entity):
    thread = Required("Thread")
    timestamp = Required(datetime)

现在我想通过最新的帖子获得某个类别的所有主题:

通过这一行,我得到了最新帖子的 ID ,但我想要这个对象。

query = select((max(p.id), p.thread) for p in Post if p.thread.category.id == SOME_ID)
    .order_by(lambda post_id, thread: -post_id)

我当然可以[(Post[i], thread) for i, thread in query]select(p for p in Post if p.id in [i for i,_ in query])

但是这会创建额外的sql语句。所以我的问题是:如何通过单个sql语句获取某个类别中所有线程的最新帖子,并按该帖子的时间戳排序。

如果您无法使用ORM,我就不会使用db.execute(sql)

1 个答案:

答案 0 :(得分:1)

试试这个:

select((p, t) for t in Thread for p in t.posts
              if p.id == max(p2.id for p2 in t.posts)
       ).order_by(lambda p, t: desc(p.id))