SQLAlchemy 查询只返回 n 个结果?

我一直在谷歌和阅读 SQLAlchemy 文档,但没有找到我要找的东西。

我在 SQLAlchemy 中寻找一个函数,它将查询返回的结果数量限制为一个特定的数字,例如: 5?比如 first()或者 all()

107064 次浏览

sqlalchemy >= 1.0.13 使用 限制方法。

query(Model).filter(something).limit(5).all()

替代语法

query.(Model).filter(something)[:5].all()

对我来说就像

def get_members():
m = Member.query[:30]
return m

如果你需要它的分页,你可以这样做:

query = db.session.query(Table1, Table2, ...).filter(...)


if page_size is not None:
query = query.limit(page_size)
if page is not None:
query = query.offset(page*page_size)
query = query.all()

或者,如果查询一个表并为其建立模型,则可以:

query = (Model.query(...).filter(...))
.paginate(page=start, per_page=size))

从1.4版开始,SQLAlchemy 核心的 选择函数为支持 FETCH子句的 RDBMS 提供了一个 捡回来方法 * 。在 SQL 2008标准中定义了 FETCH,以提供一种一致的方式来请求部分结果,因为 LIMIT/OFFSET不标准

例如:

# As with limit queries, it's usually sensible to order
# the results to ensure results are consistent.
q = select(tbl).order_by(tbl.c.id).fetch(10)


# Offset is supported, but it is inefficient for large resultsets.
q_with_offset = select(tbl).order_by(tbl.c.id).offset(10).fetch(10)


# A suitable where clause may be more efficient
q = (select(tbl)
.where(tbl.c.id > max_id_from_previous_query)
.order_by(tbl.c.id)
.fetch(10)
)

自1.4.38版以来,ORM 层支持这种语法。它只在模型上支持2.0风格的 select; 遗留的 session.query语法不支持它。

q = select(Model).order_by(Model.id).fetch(10)

* 目前 Oracle、 PostgreSQL 和 MSSQL。