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