【发布时间】:2021-02-27 06:29:17
【问题描述】:
当使用以下查询时:
Foo.query.filter_by(bar="bar")[:20]
是否加载与过滤器匹配的所有对象,我只选择前 20 个或仅加载前 20 个对象。如果是第二种,有没有办法只加载特定数量的对象?
提前谢谢各位。
【问题讨论】:
-
除了效率还有什么区别?
-
没什么,只是效率。
标签: python sqlalchemy
当使用以下查询时:
Foo.query.filter_by(bar="bar")[:20]
是否加载与过滤器匹配的所有对象,我只选择前 20 个或仅加载前 20 个对象。如果是第二种,有没有办法只加载特定数量的对象?
提前谢谢各位。
【问题讨论】:
标签: python sqlalchemy
它执行查询和过滤,然后使用普通的 Python 切片结果。
如果您希望它仅加载特定数量的记录,请使用slice() 方法。
Foo.query.filter_by(bar="bar").slice(0,20)
这会在查询中添加LIMIT 子句,因此数据库永远不会返回范围之外的任何记录。
【讨论】:
[] 是纯 python,与查询无关。这意味着所有记录(基于过滤器返回,您只需要 20 条)。如果您只想从 db 中返回 20 条记录,请使用 limit。 见SQLAlchemy query to return only n results?
【讨论】: