最小/最大与orm的关系

时间:2013-02-03 18:18:52

标签: python sqlalchemy flask-sqlalchemy

我正在尝试从外键中找到集合的最小值/最大值。我知道您可以使用session.queryfunc.min进行func.max,但有没有办法可以让我使用标准的ORM关系?

例如,对于博客,如果我想根据下面的架构找到给定帖子的最大“数字评论”,是否可以执行类似Post.query.get(0).number_comments.max()的操作?

class Post(base):
  id = Column(Integer, primary_key=True)
  number_comments = relationship("NumberComment")

class NumberComment(base):
  id = Column(Integer, primary_key=True)
  num = Column(Integer, nullable=False)

1 个答案:

答案 0 :(得分:1)

与使用原始SQL的情况一样,您需要在查询中加入这些表:

# This class lacks a foreign key in your example.
class NumberComment(base):
    # ...
    post_id = Column(Integer, ForeignKey(Post.id), nullable=False)
    # ...

session.query(func.max(NumberComment.num)).join(Post).\
    filter(Post.id == 1).scalar()

没有别的方法可以做到这一点,至少不是你想要的。这就是为什么SQLAlchemy被调用的原因而不是ORMSorcery; - )

我的建议是在尝试提出查询时考虑SQL,这对你有很大的帮助。