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})