今天在工做中遇到了一個問題, 須要使用 Flask-SQLAlchemy 進行分頁查詢, 因而結合 Swagger 有了下面的解決辦法.sql
""" 返回用戶角色的接口 --- 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": "管理員"}] """
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來保證返回的默認值是整型數字flask
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, 就返回一個空列表.app
roles = pagination.items
這個就簡單了, 使用 roles 來接收分頁查詢到的結果.url