Ambil Semua Item dari DynamoDB di Python (boto3)

Membaca satu tabel utuh di boto3 berarti melakukan paginasi scan sampai habis. Setiap respons dibatasi 1 MB, dan paginator bawaan pada client tingkat rendah mengikuti LastEvaluatedKey melintasi setiap halaman untuk Anda (cara kerja kursor DynamoDB).

API boto3 mana yang Anda pilih lebih menentukan di sini daripada paginasinya, dan paginator hanyalah separuh alasannya.

Kode

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

Penjelasan

  • Paginator milik client, bukan resourceboto3.resource("dynamodb").Table(…).scan tidak punya paginator sama sekali, jadi di sana Anda menulis sendiri loop LastEvaluatedKey-nya. Itu saja sudah alasan bagus untuk memakai client tingkat rendah pada pembacaan penuh.
  • API resource mengubah angka menjadi Decimal{"N": "1994"} yang tersimpan kembali sebagai Decimal('1994'), yang menolak diserialisasi json.dumps tanpa encoder khusus. Client di atas memberi Anda {"N": "1994"} mentah dan menyerahkan konversinya kepada Anda (enkodingnya).
  • Setel paginator-nya, jangan menggantinyapaginator.paginate(TableName="Music", PaginationConfig={"PageSize": 500, "MaxItems": 10000}). Boto3 mendefinisikan PageSize sebagai "the number of items returned per page of each result" dan MaxItems sebagai batas atas totalnya, yang memancarkan NextToken untuk Anda lanjutkan lewat StartingToken.
  • Parallel scan butuh satu client per thread, dibangun dengan hati-hatiSegment dan TotalSegments membagi pekerjaannya, dan panduan boto3 sendiri menyatakan client bersifat thread-safe sementara session dan resource tidak. Ia juga memperingatkan bahwa "Invoking boto3.client() inside of a concurrent context may result in response ordering issues". Bangun client-nya sebelum Anda menyebar, atau beri setiap worker boto3.session.Session() miliknya sendiri (kapan paralel itu sepadan).
  • items tumbuh sebesar tabelnya — tangani setiap page di dalam loop alih-alih menambah list yang Anda simpan, kecuali Anda memang sudah tahu tabelnya kecil.
  • Scan menagih setiap byte yang dibacanya, pada setiap kali jalanProjectionExpression mengecilkan responsnya dan bukan tagihannya (alasannya); FilterExpression membuang item setelah item itu dibaca dan ditagih (Scan dengan filter). Pada jalur panas Anda menginginkan sebuah query.

Lakukan secara visual

Tagihan sebuah scan penuh adalah ukuran item dikali jumlah item, dibulatkan ke atas dalam satuan 4 KB. Kalkulator ukuran item memberi Anda separuh per-item dari perhitungan itu dari sebuah item yang ditempel.

DynoTable justru menelusuri tabel live dalam grid dengan infinite scroll, dan editor SQL-nya menyebutkan operasi yang menjadi hasil kompilasi query Anda sebelum Anda menjalankannya. Perkiraan RCU hanya muncul saat metadata tabel mendukungnya. Unduh DynoTable.

Contoh terkait

Referensi

Terakhir diverifikasi 2026-07-28 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bangun request ini secara visual

Susun operasi ini di DynamoDB Query Builder gratis — key condition, filter, index, Limit, urutan sortir, dan loop paginasi — lalu salin kembali sebagai program SDK v3, CLI, atau boto3 yang bisa dijalankan.

Buka DynamoDB Query Builder

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.