在 Python(boto3)中讀取 DynamoDB 所有項目

DynamoDB 沒有「select all」— 讀取整個表格意味著一個你要分頁到底的 scan。每個回應最多帶 1 MB;boto3 內建的 scan paginator 會為你跨每一頁追蹤 LastEvaluatedKey

Code

import boto3

client = boto3.client("dynamodb")

paginator = client.get_paginator("scan")

items = []
for page in paginator.paginate(TableName="Music"):
    items.extend(page["Items"])

print(f"Table holds {len(items)} items")

說明

  • paginator 才是重點 — 單次 scan 呼叫並不會回傳整個表格;它最多回傳 1 MB。client.get_paginator("scan") 會發出後續請求(把 LastEvaluatedKey 餵回作為 ExclusiveStartKey)直到表格耗盡 — 也就是人們納悶項目為何「不見了」時忘掉的那個迴圈。(要自己手動處理?只要回應含有 LastEvaluatedKey 就持續呼叫。)
  • 記憶體items 持有整個表格。對大表格,請在迴圈內處理每一個 page(寫入檔案、串流、彙整),而非一路累積。
  • 在大表格上更快:平行 scan — 傳入 Segment=i, TotalSegments=N 並執行 N 個 worker(thread/process),每個各自對自己的 segment 分頁。總成本相同,但實際耗時大幅降低。
  • 成本 — 完整 scan 每次執行都會讀取(並計費)每個項目的每個位元組ProjectionExpression 縮小的是回應,而非帳單;別把 scan 放在熱路徑上 — 那是 query 與存取模式設計的用武之地。
  • 項目以 DynamoDB JSON 回傳({"S": ...})。偏好原生的 Python 型別?請用 resource API(table.scan + 手動的 LastEvaluatedKey 迴圈 — resource API 沒有 paginator)。

改用視覺化操作

單純看看一個表格,不需要指令稿:下載 DynoTable 即可在分頁的格線中瀏覽任何表格 — 它會為你翻過 scan 的分頁,沒有迴圈可寫錯。而在你 scan 並付費之前,DynamoDB 定價計算機 會顯示完整讀取一次你的表格實際花多少。

相關範例

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

以視覺化方式建構此請求

在免費的 DynamoDB 查詢建構器中組合此操作 — 鍵條件、Filter、Index、Limit、排序方向與分頁迴圈 — 再把它複製成可執行的 SDK v3、CLI 或 boto3 程式。

開啟 DynamoDB 查詢建構器

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。