Flask-sqlalchemy 分页设置


今天在工作中遇到了一个问题, 需要使用 Flask-SQLAlchemy 进行分页查询, 于是结合 Swagger 有了下面的解决办法.

swagger

"""
返回用户角色的接口
---
description: 此接口用来获取用户的所有角色
tags:
  - Users
parameters:
  - name: pageSize
    in: query
    description: number of roles
    type: integer
  - name: pageNum
    in: query
    description: per page number
    type: integer
response:
  200:
    description: list of Roles
    schema:
      type: array
      items:
        properties:
          id:
            integer
          name:
            string
    examples:
      [{"id": 1, "name": "管理员"}]
"""

Flask-SQLalchemy

pageSize = request.args.get('pageSize', 1, type=int)
pageNum = request.args.get('pageNum', 10, type=int)
pagination = Role.query.paginate(pageSize, per_page=pageNum, error_out=False)
roles = pagination.items
res = []
for role in roles:
    temp_role = {'id': role.id, 'name': role.name}
    res.append(temp_role)

return res

解释

pageSize = request.args.get('pageSize', 1, type=int)

通过request.args.get我们可以获取 url 中带的参数, 比如: http://localhost:9537/users?pageSize=20 携带的参数 pageSize, 值为20.
那么request.args.get('pageSize', 1, type=int)意思就是从 url 中获取参数 pageSize 的值, 如果参数不存在就使用默认值1, type=int来保证返回的默认值是整型数字

pagination = Role.query.paginate(pageSize, per_page=pageNum, error_out=False)

SQLAlchemy中的查询对象query有一个方法, 叫paginate, 它的返回值是一个分页对象pagination, Role.query.paginate(pageSize, per_page=pageNum, error_out=False) 的意思就是从数据表 Role 里查询, 第一个参数 pageSize 就是我们要查询的页数, 这里是使用上面从 url 中获取到的值, 如果这个值不存在就使用默认值1, 第二个参数 per_page 是每页要展示的个数, 这里也使用的是从 url 获取的参数 pageNum 的值, 如果不存在就使用默认值10, 第三个参数是 error_out, 意思是当查询的页数超过了总的页数范围的处理方式, 如果为 True, 就返回一个404错误, 如果为 False, 就返回一个空列表.

roles = pagination.items

这个就简单了, 使用 roles 来接收分页查询到的结果.


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM