我正在尝试从外键中找到集合的最小值/最大值。我知道您可以使用session.query
和func.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)
答案 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,这对你有很大的帮助。