Obtenir tous les éléments de DynamoDB en Python (boto3)
Il n'y a pas de « select all » dans DynamoDB — lire une table entière signifie un scan que tu pagines jusqu'au bout. Chaque réponse porte au plus 1 Mo ; le paginateur de scan intégré de boto3 suit LastEvaluatedKey à travers chaque page pour toi.
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")Explication
- Le paginateur est l'essentiel — un seul appel
scanne renvoie PAS la table ; il renvoie jusqu'à 1 Mo.client.get_paginator("scan")émet des requêtes de suivi (en réinjectantLastEvaluatedKeycommeExclusiveStartKey) jusqu'à épuisement de la table — la boucle qu'on oublie en se demandant pourquoi des éléments sont « manquants ». (Tu le fais à la main ? Continue d'appeler tant que la réponse contient unLastEvaluatedKey.) - Mémoire —
itemscontient la table entière. Pour les grandes tables, traite chaquepageà l'intérieur de la boucle (écrire dans un fichier, streamer, agréger) au lieu d'accumuler. - Plus rapide sur les grandes tables : scan parallèle — passe
Segment=i, TotalSegments=Net lance N workers (threads/processus), chacun paginant son propre segment. Même coût total, temps réel bien plus court. - Coût — un scan complet lit (et facture) chaque octet de chaque élément, à chaque exécution.
ProjectionExpressionréduit la réponse, pas la facture ; ne mets pas un scan sur un chemin critique — c'est à ça que servent query et la conception des schémas d'accès. - Les éléments reviennent en DynamoDB JSON (
{"S": ...}). Tu préfères des types Python natifs ? Utilise l'API resource (table.scan+ une boucleLastEvaluatedKeymanuelle — l'API resource n'a pas de paginateur).
À faire visuellement
Jeter un œil à une table ne nécessite pas de script : télécharge DynoTable pour parcourir n'importe quelle table dans une grille paginée — il pagine les scans pour toi, aucune boucle à rater. Et avant de scanner-et-payer, le calculateur de tarification DynamoDB montre ce que coûte réellement une lecture complète de ta table.
Exemples liés
- Obtenir tous les éléments en Node.js — la même lecture complète avec une boucle explicite.
- Obtenir tous les éléments avec l'AWS CLI — la CLI pagine pour toi.
- DynamoDB Scan en Python — scanner avec une
FilterExpression. - Scans parallèles — Segment/TotalSegments, nombre de workers, et quand s'en soucier.
- Pourquoi mon Scan DynamoDB est-il lent et coûteux ? — le modèle de coût et comment l'éviter.
- DynamoDB ProvisionedThroughputExceededException — lire la table entière est la façon classique de l'atteindre.
- "The provided starting key is invalid" — une clé de reprise malformée dans la boucle de pagination.
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
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.