Python 如何限制/抵消sqlalchemy orm关系';结果如何?

Python 如何限制/抵消sqlalchemy orm关系';结果如何?,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,在我有一个用户模型和文章模型的情况下,用户和文章是一对多的关系。所以我可以访问这样的文章 user = session.query(User).filter(id=1).one() print user.articles 但这将列出用户的所有文章,如果我想将文章限制在10篇呢?在rails中有一个all()方法,其中可以包含限制/偏移。在sqlalchemy中还有一个all()方法,但不带参数,如何实现 编辑: 似乎user.articles[10:20]是有效的,但是sql在查询中没有使用1

在我有一个用户模型和文章模型的情况下,用户和文章是一对多的关系。所以我可以访问这样的文章

user = session.query(User).filter(id=1).one()
print user.articles
但这将列出用户的所有文章,如果我想将文章限制在10篇呢?在rails中有一个
all()
方法,其中可以包含限制/偏移。在sqlalchemy中还有一个
all()
方法,但不带参数,如何实现

编辑:


似乎
user.articles[10:20]
是有效的,但是sql在查询中没有使用10/20。因此,事实上,它将加载所有匹配的数据,并在python中进行过滤?

解决方案是使用SQLAlchemy文档一节中描述的
动态关系

通过将关系指定为

class User(...):
    # ...
    articles = relationship('Articles', order_by='desc(Articles.date)', lazy='dynamic')
然后,您可以编写
user.articles.limit(10)
,它将生成并执行一个查询,以便用户获取最后十篇文章。或者,如果愿意,可以使用
[x:y]
语法,该语法将自动生成
限制
子句


性能应该是合理的,除非您想为100个左右的用户查询过去的10篇文章(在这种情况下,至少会向服务器发送101个查询)。

节省了我的时间,我试图在子查询中运行order desc,只是为了嵌套关系,这太难了(互联网上没有示例)