如何在不获取整个表的情况下进行分页?

时间:2019-04-13 13:34:32

标签: python pagination django-rest-framework

我正在尝试分页从我的(从 Azure 上的远程数据库中)获取的数据可以在下面的代码中看到:

[ i for i in range(111, 445) if 0< i%(i-i%10) <5]

这里的问题是:我先获取整个表,然后对它进行分页。我如何分页,而不必获取整个表? 注意:我没有使用Django模型

1 个答案:

答案 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)