首页 > 解决方案 > 如何在 SQL 查询中按页面设置分页?

问题描述

如何在 SQL 查询中按页面设置分页,我尝试使用 django 默认分页,但它在我的代码中不起作用,我直接使用 SQL 原始查询而不是 ORM 获取数据。我认为另一种方法是使用 SQL 查询 LIMIT 或 OFFSET 设置分页,但我在搜索下一页时不知道 url-endpoint。

class Order_ListAPIView(APIView):

    def get(self,request,format=None):

        if request.method == 'GET':
            cur,conn = connection()
            order_query = ''' SELECT * FROM orders'''
            order_detail_query = ''' SELECT * FROM order_details'''

            with conn.cursor(MySQLdb.cursors.DictCursor) as cursor:

                cursor.execute(order_query)
                order_result = cursor.fetchall()
                order_data = list(order_result)

            ...
             ... #rest_code
              ...


            return Response({"order_data":order_data},status=status.HTTP_200_OK)
        else:
            return Response(status=status.HTTP_400_BAD_REQUEST)

标签: mysqlsqldjangodjango-rest-framework

解决方案


我对 Django 不太熟悉,但正如您所说,您是使用 MySQL 从数据库中自己获取原始数据,因此设置分页应该像添加LIMIT $offset, $perpage到 MySQL 查询一样简单......

SELECT * FROM order_details LIMIT 0, 5;

例如,此查询将为您提供 PAGE 1,每页 5。要以每页 5 个进入第 5 页,它是LIMIT 4*5, 5= LIMIT 25, 5。如果您想以每页 10 个页面进入第 37 页,则为LIMIT 36*10, 10= LIMIT 360, 10

这应该解决 MySQL 部分的分页问题。您需要设置 vars 来确定两者pageperpage来自用户,可能来自 GET 参数。


推荐阅读