如何使用 AWS rds-data 使用 boto3 和 AWS-aurora 对我的 mysql 查询进行分页?

How do I paginate my mysql query using AWS rds-data using boto3 and AWS-aurora?

我正在使用 Boto3 从 AWS Lambda 无服务器查询 AWS Aurora (MySQL)。我想查询一个有超过 10k 条记录的 table。我的查询可以获取超过 7k 的记录。现在我如何在数据库级别或 Lambda 级别对这些数据进行分页,以便每页获得更少的数据并将该小数据集发送到用户界面进行显示?我无法发送 7k 条记录的整个数据集。

这是我的 Python 代码

rdsDataClient.execute_statement(resourceArn=cluster_arn,
                                secretArn=secret_arn,
                                database='myTestDB',
                                sql=sqlQuery,
                                parameters = paramSet
                               )

我知道 SQL 查询 LIMIT 和 OFFSET,但想知道是否有其他更好的方法来执行此操作。请帮忙

谢谢。

我认为最好的方法是让数据库处理分页,原因如下:

  • 查询写起来很简单,只需按照您的建议添加一个 LIMIT 和 OFFSET。

  • 如果分页,数据库和服务/lambda之间传输的数据将大大减少,从而节省时间和成本。

  • 在服务中存储数据所需的内存会更少,因此您不需要更强大的 lambda 来进行计算。

  • 由于上述原因,服务/lambda 的响应性会更好。

是的,我使用了将限制和偏移量传递给 sqlQuery 的方法。 这是我做的

def lambda_handler(event, context):
    queryParameters = event["queryStringParameters"]
    search = getQueryStringElement("search", queryParameters, '')
    pageSize = int(getQueryStringElement("pageSize", queryParameters, 5))
    page = int(getQueryStringElement("page", queryParameters, 1))
    
    limit = pageSize
    offset = (pageSize * page) - pageSize
    
    sqlQuery = sqlQuery + ' LIMIT {} OFFSET {} ;'.format(limit, offset)

    rdsDataClient.execute_statement(resourceArn=cluster_arn,
                                secretArn=secret_arn,
                                database='myTestDB',
                                sql=sqlQuery,
                                parameters = paramSet
                               )

这个解决方案非常适合我在 UI

中显示分页记录列表的用例

谢谢