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', ...)>]
posted @   上海-悠悠  阅读(715)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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文件上传
点击右上角即可分享
微信分享提示