我正在尝试分页从我的表(从 Azure 上的远程数据库中)获取的数据可以在下面的代码中看到:
[ i for i in range(111, 445) if 0< i%(i-i%10) <5]
这里的问题是:我先获取整个表,然后对它进行分页。我如何分页,而不必获取整个表? 注意:我没有使用Django模型
答案 0 :(得分:1)
我建议从数据库中调用已过滤的数据,因为它是分页的,因此可以使用跳过和限制逻辑来调用API,以解析下一个或前一个数据。
SELECT * FROM TableName ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
例如 首先,您需要10个ROWS,然后从您的应用程序传递参数 skip = 0&limit = 10
SELECT * FROM TableName ORDER BY id OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
现在,如果您单击下一步并想要下10个行,则只需传递skip = 10&limit = 10的参数
SELECT * FROM TableName ORDER BY id OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY;
类似地,您也可以通过按需传递限制来更改每页的结果。
根据您的代码,我希望您使用的是GET方法
@api_view(['GET'])
def get(request):
paginator = PageNumberPagination()
skip=request.params.get('skip')
limit=request.params.get('limit')
query = "SELECT * FROM Client_table ORDER BY ID OFFSET "+ skip + " ROWS FETCH NEXT " + limit+" ROWS ONLY"
my_query = query_db(query)
result_page = paginator.paginate_queryset(my_query, request)
json_output = json.dumps(result_page, cls=DjangoJSONEncoder)
return paginator.get_paginated_response(json_output)