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', ...)>]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2022-10-10 Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库
2022-10-10 Flask 学习-86.Flask-APScheduler 创建定时任务
2021-10-10 python测试开发django-150.ECharts 生成折线图
2021-10-10 python测试开发django-149.ECharts 生成柱状图
2018-10-10 pytest文档26-运行上次失败用例(--lf 和 --ff)
2018-10-10 pytest文档25-conftest.py作用范围
2017-10-10 selenium+python自动化77-autoit文件上传