如何限制/偏移sqlalchemy orm关系的结果?

2024-06-15 21:34:24 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个用户模型和文章模型,用户和文章是一对多关系。所以我可以读到这样的文章

user = session.query(User).filter(id=1).one()
print user.articles

但这将列出用户的所有文章,如果我想将文章限制在10篇怎么办?在rails中有一个all()方法,它可以有限制/偏移。在sqlalchemy中也有一个all()方法,但是不带参数,如何实现这一点?

编辑:

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


Tags: 方法用户模型id关系session文章all
1条回答
网友
1楼 · 发布于 2024-06-15 21:34:24

解决方案是使用SQLAlchemy文档的collection configuration techniques部分中描述的dynamic关系。

通过将关系指定为

class User(...):
    # ...
    articles = relationship('Articles', order_by='desc(Articles.date)', lazy='dynamic')

然后您可以编写user.articles.limit(10),它将生成并执行一个查询,以便用户获取最后十篇文章。或者,如果您愿意,可以使用[x:y]语法,它将自动生成LIMIT子句。

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

相关问题 更多 >