Flask 学习-73.Flask-SQLAlchemy 分页查询paginate

2023-10-31

前言

Flask-SQLAlchemy 提供了一个分页查询方法 paginate(),方便我们实现在后端查询分页。

分页查询

在django 框架里面有个rest_framework.pagination 分页器, 只需简单的配置就可以实现分页

from rest_framework.pagination import PageNumberPagination

# 定义分页器简单分页(PageNumberPagination)
class MyPageNumberPagination(PageNumberPagination):
    page_size = 50                   # 默认每页显示的多少条记录
    page_query_param = 'page'         # 默认查询参数名为 page
    page_size_query_param = 'size'    # 前台控制每页显示的最大条数
    max_page_size = 100              # 后台控制显示的最大记录条数

Flask-SQLAlchemy 也提供了一个 paginate()查询方法, 相关源码如下

    def paginate(self, page=None, per_page=None, error_out=True, max_per_page=None):
        """Returns ``per_page`` items from page ``page``.

        If ``page`` or ``per_page`` are ``None``, they will be retrieved from
        the request query. If ``max_per_page`` is specified, ``per_page`` will
        be limited to that value. If there is no request or they aren't in the
        query, they default to 1 and 20 respectively.

        When ``error_out`` is ``True`` (default), the following rules will
        cause a 404 response:

        * No items are found and ``page`` is not 1.
        * ``page`` is less than 1, or ``per_page`` is negative.
        * ``page`` or ``per_page`` are not ints.

        When ``error_out`` is ``False``, ``page`` and ``per_page`` default to
        1 and 20 respectively.

        Returns a :class:`Pagination` object.
        """

        return Pagination(self, page, per_page, total, items)

参数说明:
page: 指定页码,从1开始
per_page: 每一页显示几条数据
error_out:是否抛出错误(默认为True)大部分error_outFalse, page and per_page 默认值是 1和20
max_per_page:每页显示最大值当指定了max_per_page时,per_page会受到这个值的限制

调用 paginate()查询方法会返回一个Pagination 对象的实例

class Pagination(object):
    """Internal helper class returned by :meth:`BaseQuery.paginate`.  You
    can also construct it from any other SQLAlchemy query object if you are
    working with other libraries.  Additionally it is possible to pass `None`
    as query object in which case the :meth:`prev` and :meth:`next` will
    no longer work.
    """

    def __init__(self, query, page, per_page, total, items):
        #: the unlimited query object that was used to create this
        #: pagination object.
        self.query = query
        #: the current page number (1 indexed)
        self.page = page
        #: the number of items to be displayed on a page.
        self.per_page = per_page
        #: the total number of items matching the query
        self.total = total
        #: the items for the current page
        self.items = items

Pagination类对象的属性主要有:
has_next:如果在目前页后至少还有一页的话,返回 True。
has_prev:如果在目前页之前至少还有一页的话,返回 True。
next_num:下一页的页面数。
prev_num:前一页的页面数。

另外还有如下的可调用方法:
iter_pages():一个迭代器,返回一个在分页导航中显示的页数列表。
prev():上一页的分页对象。
next():下一页的分页对象。

实例属性有
query:创建Pagination对象对应的query对象
total:匹配的元素总数
per_page:每一页显示的元素个数
items:当前页面的查询结果

分页查询接口

from flask import make_response, request
from http import HTTPStatus

@api.route('/demo')
class ProjectInfoView(Resource):


    @api.doc(description='查询')
    @api.marshal_with(project_model)
    def get(self):
        """查询全部"""
        api.logger.info(f"GET query查询参数: {request.args}")
        # 按id倒序
        objs = Demo.query.order_by(Demo.id.desc())
        # 分页 page=None, per_page=None, error_out=True, max_per_page=None
        page_objs = objs.paginate(
            page=int(request.args.get("page", 1)),
            per_page=int(request.args.get("size", 10)),
            error_out=False,
            max_per_page=50
        ).items
        return page_objs, HTTPStatus.OK

分页接口查询示例/demo?page=1&size=3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask 学习-73.Flask-SQLAlchemy 分页查询paginate 的相关文章

  • for 循环在 Python 中生成/导出输出所需的时间太长

    这个问题是上一个问题的延续for 循环花费太长时间才能产生输出 https stackoverflow com questions 41339200 for loop taking too long to produce output no
  • 使用notebook时将jar添加到pyspark

    我正在尝试将 mongodb hadoop 与 Spark 集成 但不知道如何使 IPython 笔记本可以访问这些 jar 这是我想做的 set up parameters for reading from MongoDB via Had
  • 在Linux中的端口80上运行flask[重复]

    这个问题在这里已经有答案了 也许以前有过这个问题的答案 所以请重定向我 如果是这样的话 我正在考虑在端口 80 上运行 Flask 所以我检查了是否有任何东西正在使用端口 80 因为事实证明端口 80 没有运行 所以当我输入以下内容时 if
  • 如何从数据库模式自动生成示例 Django 应用程序?

    我正在评估概念验证应用程序的框架 该应用程序的生命周期约为 30 天 之后它将被遗忘或完全重写 我已确定要从现有数据库模式自动生成示例应用程序 然后调整视觉设计的某些方面 我看过一个演示红宝石 on Rails 它会为数据库中的每个表自动生
  • Pyjnius导入jar文件

    Pyjnius 允许您为 java 类创建 python 包装器 例如 Hardware autoclass org myapp Hardware 有没有办法像这样导入现有的 jar 文件 语法是什么样的 您可以将 jar 添加到 CLAS
  • PRAW 出现 SSLError?

    我正在尝试开始使用 PRAW 但在使用 login 时遇到问题 我有以下代码 import praw r praw Reddit This is a test bot r login myRedditUsername password 我收
  • Python/Scipy 2D 插值(非均匀数据)

    这是我上一篇文章的后续问题 Python Scipy 插值 地图坐标 https stackoverflow com questions 5124126 python scipy interpolation map coordinates
  • 确保特定列位于数据框中最后(或第一个)的最快方法是什么

    given df df pd DataFrame np arange 8 reshape 2 4 columns list abcd 假设我需要专栏 b 到最后 我可以做 df a c d b 但是确保给定列位于末尾的最有效方法是什么 这就
  • UTF-8 解码如何知道字节边界?

    我一直在阅读大量有关 unicode 编码的文章 尤其是有关 Python 的文章 我想我现在对此已经有了相当深入的了解 但仍有一个小细节我有点不确定 解码如何知道字节边界 例如 假设我有一个带有两个 unicode 字符的 unicode
  • Python 将 0 计算为 False

    在 Python 控制台中 gt gt gt a 0 gt gt gt if a print L gt gt gt a 1 gt gt gt if a print L L gt gt gt a 2 gt gt gt if a print L
  • 即使使用标头和 Session 对象,Python requests.get 也会失败并出现 403 禁止

    我正在发出 GET 请求来获取 JSON 它在任何设备上的任何浏览器中都可以正常工作 但不能通过 python 请求 url https angel co autocomplete new tags params query sci tag
  • 使用字体模块的 Tkinter 代码无法从命令行运行?

    我有使用 tkinter 的代码 我可以从 IDLE 运行得很好 但会引发异常AttributeError module object has no attribute font 当它从命令行运行时 其他 tkinter 程序工作正常 但任
  • 有什么理由不在Python中混合使用多处理和线程模块

    我正在考虑使用Python来实现一个需要大量多线程的程序 另一个要求是它将在桌面上运行 因此拥有许多进程将使应用程序显得混乱且难以杀死 在任务管理器中 因此 我正在考虑使用线程和多处理模块来减少进程数量 据我了解 GIL 仅适用于单个进程
  • Python 多处理:全局对象未正确复制到子级

    前几天我回答了一个关于SO的问题 https stackoverflow com q 67047533 1925388关于并行读取 tar 文件 这是问题的要点 import bz2 import tarfile from multipro
  • 为什么变量不在循环外更新?

    无法弄清楚为什么结果中的第一个键是 abc 而不是我期望的 c 我使用的是Python 3 6 4 数据结构很奇怪 因为我删除了不相关的键和值 f replace ab r data abc 1 def 2 ghi 3 jkf 4 lmn
  • 类型错误:不可散列的类型:pandas 的“切片”

    我有一个 pandas 数据结构 我这样创建 test inputs pd read csv input test csv delimiter 它的形状 print test inputs shape is this 28000 784 我
  • 如何从集合中检索元素而不删除它?

    假设如下 gt gt gt s set 1 2 3 我如何获得一个值 任何值 s不做s pop 我想将该项目保留在集合中 直到我确定可以删除它 这只有在异步调用另一个主机之后才能确定 又快又脏 gt gt gt elem s pop gt
  • 根据键的重复值从列表中删除字典

    我是Python新手 假设我有以下字典列表 mydictList a 1 b 2 c 3 a 2 b 2 c 4 a 2 b 3 c 4 从上面的列表中 我想删除具有相同键 b 值的字典 所以结果列表应该是 mydictList a 1 b
  • Pandas 将时间序列数据重新采样为 15 分钟和 45 分钟 - 使用多索引或列

    我有一些时间序列数据作为 Pandas 数据框 它从每小时过去 15 分钟和过去 45 分钟 时间间隔为 30 分钟 的观察开始 然后将频率更改为每分钟 我想对数据进行重新采样 以便整个数据帧的频率为每 30 分钟一次 15 点和 45 点
  • Django Python - LDAP 身份验证

    我目前正在研究 Django Python 我的目标是从 Ldap 目录对用户进行身份验证 我确实有 python 代码来访问 ldap 目录并检索信息 Code import ldap try l ldap open ldap forum

随机推荐

  • Qt中使用QTextStream中文乱码的情况解决

    1 前言 今天在做一个文件编辑器 然后发现读取txt文件的时候 中文的显示乱码 然后在网上查了一些方法 没用 自己摸索了一下 找出了一个办法 2 解决办法 QTextStream in new QTextStream file in gt
  • Csharp:TinyMCE HTML Editor in .NET WindowsForms

  • STM32控制电机简易教程

    STM32控制电机简易教程 包教包会 近期 电赛临近 来补习一下电机的使用方式 使用起来非常的方便 首先是在CUBEMX里面配置一些基本内容 然后是使用PWM去调速 其他的时钟和调试配置就不多说了 然后就是初始化了 同样的 这里使用的是结构
  • 【华为OD机试真题 python】最大报酬【2022 Q4

    题目描述 最大报酬 小明每周上班都会拿到自己的工作清单 工作清单内包含 n 项工作 每项工作都有对应的耗时时间 单位 h 和报酬 工作的总报酬为所有已完成工作的报酬之和 那么请你帮小明安排一下工作 保证小明在指定的工作时间内工作收入最大化
  • 如何在SYSTEM权限下实现屏幕监控

    屏幕监控是远控软件的基本功能之一 现在很多远控程序的服务端通常为DLL形式 通过远程线程注入等方法插入到services svchost等SYSTEM权限的进程中去 而此时常规的屏幕监控就会失效 这是因为与SYSTEM权限进程关联的窗口站
  • Springboot 各种常用配置

    目录 数据库配置 常用 sql 数据源 spring 配置 druid 依赖 基础配置 统一错误处理 统一响应信息处理 Swagger 配置 Spring security 配置 抽象业务配置 实体类的父类 控制器父类 mybatis pl
  • 【统计模型】ToothGrowth数据集双因素方差分析

    目录 ToothGrowth数据集双因素方差分析 一 研究目的 二 数据来源和相关说明 三 描述性分析 3 1 样本描述 3 2 样本均值 3 3 箱线图 四 数学建模 五 结论与建议 5 1 结论 5 2 建议 六 代码 ToothGro
  • 111. 二叉树的最小深度

    给定一个二叉树 找出其最小深度 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 说明 叶子节点是指没有子节点的节点 Definition for a binary tree node public class TreeNode in
  • android so劫持,防劫持SDK

    防劫持SDK 一 产品简介 防劫持SDK是具备防劫持兼防截屏功能的SDK 可有效防范恶意程序对应用进行界面劫持与截屏的恶意行为 二 iOS版本 2 1 环境要求条目说明兼容平台iOS 8 0 开发环境XCode 4 0 CPU架构armv7
  • 四、设计工程

    软件设计开始于软件需分析和规约之后 是把需求转化为软件系统的重要环节 软件需求解决 做什么 的问题 软件设计解决 怎么做 的问题 一 概述 早期设计工程分为概要设计和详细设计 概要设计 将需求转换为数据结构 软件体系结构及其接口 详细设计或
  • 另一种排序方法 C#

    private void button27 Click object sender EventArgs e int array new int 10 3 2 4 90 50 20 34 22 49 int newArray new int
  • 125道Python面试题总结

    Pyhton面试宝典 提高编程能力的最有效办法就是 敲代码 1 一行代码实现1 100之和 res sum range 1 101 print res 5050 Python精华知识点手册 完整版 下载 2 如何在一个函数内部修改全局变量
  • Java嵌入式数据库H2学习总结(一)——H2数据库入门

    只为成功找方法 不为失败找借口 Java嵌入式数据库H2学习总结 一 H2数据库入门 一 H2数据库介绍 常用的开源数据库有 H2 Derby HSQLDB MySQL PostgreSQL 其中H2和HSQLDB类似 十分适合作为嵌入式数
  • ios(六)sqlite3以及FMDB

    SQLite 一种轻量的本地数据库 方便嵌入系统 支持跨平台 根据工作经验来看 无论是Android还是iOS大多都采用SQLite 首先我们需要新建一个数据库 我们给他起名personinfo sqlite 创建一张叫做person的表
  • HashMap 与HashTable的区别

    HashMap 与HashTable的区别 HashMap与Hashtable的区别是面试中经常遇到的一个问题 这个问题看似简单 但如果深究进去 也能了解到不少知识 本文对两者从来源 特性 算法等多个方面进行对比总结 力争多角度 全方位的展
  • python绘图坐标轴

    转载很好的学习资料 https zhuanlan zhihu com p 448571003
  • MySQL必知必会 学习笔记 第二十七章 全球化和本地化

    不同的语言和字符集需要以不同的方式存储和检索 MySQL需要适应不同的字符集 以及排序和检索这些数据的方法 术语 1 字符集 字母和符号的集合 2 编码 某个字符集成员的内部表示 3 校对 规定字符如何比较 查看MySQL支持的字符集列表
  • WebGL开源框架列举概述

    一 概述 WebGL是基于OpenGL的JavaScript API 库 允许Web浏览器在浏览器中渲染3D 2D图形 而无需安装额外的插件 桌面应用程序 任何第三方插件或浏览器扩展 WebGL允许通过浏览器使用机器GPU将3D图形渲染为H
  • 域更改目录服务器状态 不可用,active directory域服务当前不可用怎么解决

    基本上每个在win7系统用过打印机的用户都会遇到过 active directory域服务当前不可用 这个问题 那到底是什么导致现在的问题诞生呢 那要怎么设置才可以恢复active directory域服务呢 下面就跟着小编一起来看看吧 步
  • Flask 学习-73.Flask-SQLAlchemy 分页查询paginate

    前言 Flask SQLAlchemy 提供了一个分页查询方法 paginate 方便我们实现在后端查询分页 分页查询 在django 框架里面有个rest framework pagination 分页器 只需简单的配置就可以实现分页 f