Obter todos os itens do DynamoDB em Python (boto3)
Não existe "select all" no DynamoDB — ler uma tabela inteira significa um scan que você pagina até o fim. Cada resposta carrega no máximo 1 MB; o paginator de scan embutido do boto3 segue o LastEvaluatedKey por todas as páginas por você.
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")Explicação
- O paginator é o ponto principal — uma única chamada
scanNÃO retorna a tabela; ela retorna até 1 MB.client.get_paginator("scan")emite requisições subsequentes (alimentandoLastEvaluatedKeyde volta comoExclusiveStartKey) até a tabela se esgotar — o loop que as pessoas esquecem quando se perguntam por que os itens estão "faltando". (Fazendo na mão? Continue chamando enquanto a resposta contiver umLastEvaluatedKey.) - Memória —
itemsguarda a tabela inteira. Para tabelas grandes, processe cadapagedentro do loop (grave em um arquivo, transmita, agregue) em vez de acumular. - Mais rápido em tabelas grandes: parallel scan — passe
Segment=i, TotalSegments=Ne execute N workers (threads/processos), cada um paginando seu próprio segmento. Mesmo custo total, muito menos tempo de relógio. - Custo — um scan completo lê (e cobra) cada byte de cada item, toda vez que você o executa.
ProjectionExpressionencolhe a resposta, não a conta; não coloque um scan em um caminho quente — é para isso que existem o query e o design de padrões de acesso. - Os itens retornam em DynamoDB JSON (
{"S": ...}). Prefere tipos nativos do Python? Use a API resource (table.scan+ um loop manual deLastEvaluatedKey— a API resource não tem paginator).
Faça visualmente
Dar uma olhada em uma tabela não precisa de um script: baixe o DynoTable para navegar em qualquer tabela em uma grade paginada — ele pagina os scans por você, sem loop para errar. E antes de fazer scan e pagar, a calculadora de preços do DynamoDB mostra quanto uma leitura completa da sua tabela realmente custa.
Exemplos relacionados
- Obter todos os itens em Node.js — a mesma leitura completa com um loop explícito.
- Obter todos os itens com a AWS CLI — a CLI pagina por você.
- DynamoDB Scan em Python — fazendo scan com uma
FilterExpression. - Parallel scans — Segment/TotalSegments, contagem de workers e quando se dar ao trabalho.
- Por que meu DynamoDB Scan é lento e caro? — o modelo de custo e como evitá-lo.
- DynamoDB ProvisionedThroughputExceededException — ler a tabela inteira é a forma clássica de esbarrar nele.
- "The provided starting key is invalid" — uma chave de retomada corrompida no loop de paginação.
References
- Scan — Amazon DynamoDB API Reference
- DynamoDB.Paginator.Scan — Boto3 documentation
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.