簡體   English   中英

如何使用 boto3 和 AWS-aurora 使用 AWS rds-data 對 mysql 查詢進行分頁?

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

我正在使用 Boto3 從 AWS Lambda 查詢 AWS Aurora (MySQL) 無服務器。 我想查詢一個記錄超過 10k 條的表。 我的查詢可以獲取超過 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 之間傳輸的數據會少得多,從而節省時間和成本。

  • 在服務中存儲數據所需的 memory 會更少,因此您不需要更強大的 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 中顯示分頁記錄列表的用例

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM