Python'da (boto3) DynamoDB'den Tüm Öğeleri Alma

boto3'te bir tablonun tamamını okumak, bir scan'i sonuna kadar sayfalamak demektir. Her yanıt 1 MB'da tavanlanır ve düşük düzeyli istemcinin yerleşik sayfalayıcısı LastEvaluatedKey'i sizin için her sayfa boyunca takip eder (DynamoDB imleçleri nasıl çalışır).

Burada hangi boto3 API'sini seçtiğiniz sayfalamadan daha önemlidir ve sayfalayıcı bunun yalnızca yarısıdır.

Kod

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")

Açıklama

  • Sayfalayıcılar kaynağa değil istemciye aittirboto3.resource("dynamodb").Table(…).scan'in hiç sayfalayıcısı yoktur, dolayısıyla orada LastEvaluatedKey döngüsünü kendiniz yazarsınız. Tam bir okuma için düşük düzeyli istemciyi kullanmanın tek başına iyi bir gerekçesi budur.
  • Kaynak API'si sayıları Decimal'a çevirir — saklanan bir {"N": "1994"} geri Decimal('1994') olarak gelir ve json.dumps özel bir kodlayıcı olmadan onu serileştirmeyi reddeder. Yukarıdaki istemci size ham {"N": "1994"}'ü verir ve dönüşümü size bırakır (kodlama).
  • Sayfalayıcıyı değiştirmek yerine ayarlayınpaginator.paginate(TableName="Music", PaginationConfig={"PageSize": 500, "MaxItems": 10000}). Boto3, PageSize'ı "her sonucun sayfası başına döndürülen öğe sayısı", MaxItems'ı ise toplam üzerinde bir tavan olarak tanımlar; ikincisi StartingToken ile kaldığınız yerden devam ettiğiniz bir NextToken yayar.
  • Paralel taramalar iş parçacığı başına bir istemciye ihtiyaç duyar ve bunlar dikkatle kurulmalıdırSegment ve TotalSegments işi böler ve boto3'ün kendi rehberliği, istemcilerin iş parçacığı güvenli, oturum ve kaynakların ise olmadığı yönündedir. Ayrıca "Invoking boto3.client() inside of a concurrent context may result in response ordering issues" uyarısını yapar. İstemciyi dallanmadan önce kurun ya da her işçiye kendi boto3.session.Session()'ını verin (paralel ne zaman değer).
  • items tablonun boyutuna kadar büyür — tablonun küçük olduğunu zaten bilmiyorsanız, elde tuttuğunuz bir listeyi genişletmek yerine her page'i döngünün içinde işleyin.
  • Bir tarama, okuduğu her baytı, her çalıştırmada faturalandırırProjectionExpression yanıtı küçültür, faturayı değil (nedeni); bir FilterExpression öğeleri okunup ücretlendirildikten sonra eler (filtreli Scan). Sıcak bir yolda istediğiniz şey bir query'dir.

Görsel olarak yapın

Tam bir taramanın faturası, öğe boyutu çarpı öğe sayısıdır ve 4 KB'lık birimlere yuvarlanır. Öğe boyutu hesaplayıcısı, yapıştırılmış bir öğeden bunun öğe başına yarısını verir.

DynoTable ise canlı bir tabloyu sonsuz kaydırmalı bir ızgarada sayfalar ve SQL düzenleyicisi, siz çalıştırmadan önce sorgunuzun derlendiği işlemi adlandırır. RCU tahmini yalnızca tablo meta verileri buna izin verdiğinde görünür. DynoTable'ı indirin.

İlgili örnekler

Kaynaklar

En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Bu isteği görsel olarak oluştur

Bu operasyonu ücretsiz DynamoDB Sorgu Oluşturucuda kur — anahtar koşulu, filtre, index, Limit, sıralama yönü ve bir sayfalama döngüsü — ve çalıştırılabilir bir SDK v3, CLI veya boto3 programı olarak geri kopyala.

DynamoDB Sorgu Oluşturucuyu aç

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.