SQLAlchemy学习-13.分页查询'Query' object has no attribute 'paginate'
前言
用过Flask-SQLAlchemy的应该知道, 它提供了一个分页查询方法 paginate(),方便我们实现在后端查询分页。
但是单独使用SQLAlchemy 却没有paginate方法,会报错:AttributeError: 'Query' object has no attribute 'paginate'
SQLAlchemy 没有paginate方法
Flask-SQLAlchemy 分页查询参考https://www.cnblogs.com/yoyoketang/p/16720577.html
在 SQLAlchemy 中单独使用paginate方法
# 作者-上海悠悠 微信/QQ交流:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/
query_objs = session.query(Project)
page_objs = query_objs.paginate(
page=1,
per_page=10,
error_out=False,
max_per_page=100
)
运行后发现报错了AttributeError: 'Query' object has no attribute 'paginate'
因为SQLAlchemy是没有paginate方法的,paginate是flask_sqlalchemy中才有的方法
实现分页查询
我们想单独使用SQLAlchemy 实现分页功能,比如fastapi 中单独使用SQLAlchemy,sqlalchemy提供了实现分页查询的方法:即 offset(偏移量) 与 limit(数据条数限制)。
前端一般用page和size查询,如/project?page=1&size=10
查询第1页,每页显示10条数据。
于是我们需要自己转换下,把sqlalchemy自带的 offset(偏移量)与 limit(数据条数限制),转成page和size
其中limit 和 size 意思是一样的,每次输出的数量限制
offset = (page - 1) * size
示例1:/project?page=1&size=5
查询第1页,每页显示5条数据。
page = 1
size = 5
offset_data = (page - 1) * size
res = session.query(models.Project).offset(offset_data).limit(size)
print(res.all()) # [<Project(id='1',...)>, <Project(id='2',...)>, <Project(id='3',...)>, <Project(id='4',...)>, <Project(id='5',...)>]
查询到前5个数据。
示例2:/project?page=2&size=3
查询第2页,每页显示3条数据。
# 作者-上海悠悠 微信/QQ交流:283340479
# blog地址 https://www.cnblogs.com/yoyoketang/
page = 2
size = 3
offset_data = (page - 1) * size
res = db.query(models.Project).offset(offset_data).limit(size)
print(res.all()) # [<Project(id='4', ...)>, <Project(id='5', ...)>, <Project(id='6', ...)>]