当前位置: 首页 > 工具软件 > tortoise-orm > 使用案例 >

tortoise-orm 分页码(python)

岳谦
2023-12-01

tortoise-orm官方文档
sanic官方文档
需求描述:
由于某些orm没有分页的的封装, 自己写一个分页(tortoise-orm)
我简单看了一下 flask_sqlalchemy 中的 paginate , 他的分页也是先查出过滤查询用的总数量再进行操作的, 所以代码中的 sql_count 就是外面查询出的.count()

def paginate(request, sql_count):
    """
    分页
    :param request: 请求体的参数
    :param sql_count: 查询过后的数量
    :return: offset_num sql查询的开始num, limit_num多少条, page页码, pages总页数
    """
    try:
        page = int(request.args.get('page'))
        per_page = int(request.args.get('per_page'))
    except:
        page = 1
        per_page = 20
    pages = sql_count // per_page if sql_count % per_page == 0 else sql_count // per_page + 1
    if page <= 0:
        abort(404)  # 这里我用的sanic
    offset_num = (page - 1) * per_page
    limit_num = per_page
    return offset_num, limit_num, page, pages

Queryset这里就可以使用上面函数返回的 offset_num, limit_num

        s = await Team.filter(
            # name__icontains='8'
        ).offset(offset_num).limit(limit_num)

返回响应, 这里就使用到 page, pages
sql_count是前面ORM过滤查出的总条数

# 这里是用的sanic框架, json是属于sanic里面的
return json({"data": data, "pages": pages, "page": page, "total": sql_count})
 类似资料: