Làm cách nào để phân trang kết quả của tôi từ DynamoDB bằng thư viện python Boto? Từ tài liệu API Boto, tôi không thể tìm hiểu xem nó có hỗ trợ phân trang hay không, mặc dù API DynamoDB không hỗ trợ phân trang.Phân trang trong Amazon DynamoDB bằng Boto
Trả lời
Boto không hỗ trợ "phân trang" như hành vi sử dụng kết hợp "ExclusiveStartKey" và "Limit". Ví dụ: để phân trang Scan
.
Dưới đây là một ví dụ mà nên phân tích một bảng toàn bởi khối 10
esk = None
while True:
# load this batch
scan_generator = MyTable.scan(max_results=10, exclusive_start_key=esk)
# do something usefull
for item in scan_generator:
pass # do something usefull
# are we done yet ?
else:
break;
# Load the last keys
esk = scan_generator.kwargs['exclusive_start_key'].values()
EDIT:
Như đã chỉ ra bởi @garnaat, có thể là tôi hiểu lầm mục tiêu thực tế của bạn. Đề xuất trên cho phép bạn cung cấp phân trang như SO cho câu hỏi chẳng hạn. Không quá 15 mỗi trang.
Nếu bạn chỉ cần một cách để tải toàn bộ tập kết quả được tạo bởi một Scan
, Boto là một thư viện tuyệt vời và đã tóm tắt điều này cho bạn mà không cần ma thuật đen như trong câu trả lời của tôi. Trong trường hợp này, bạn nên làm theo những gì anh ta (@garnaat) khuyên. Btw, ông là tác giả của Boto và, như vậy, một tài liệu tham khảo tuyệt vời cho các câu hỏi liên quan đến Boto :)
Có lẽ tôi hiểu nhầm câu hỏi nhưng tôi nghĩ rằng bạn đang làm cho nó khó khăn hơn nó cần. Nếu bạn đang sử dụng giao diện DynamoDB lớp 2 trong boto (mặc định), nó xử lý việc phân trang cho bạn.
Vì vậy, nếu bạn muốn làm một thao tác truy vấn, bạn chỉ cần làm điều này:
import boto
c = boto.connect_dynamodb()
t = c.get_table('mytable')
for item in t.query(hash_key='foo'):
print item
này sẽ tự động xử lý các pagination kết quả từ DynamoDB. Tương tự cũng sẽ làm việc cho một yêu cầu quét.
Có lẽ tôi không hiểu điều gì đó, nhưng điều này chỉ cho phép để có được tất cả các mục một. Những gì tôi muốn là để có được thứ N "trang", nơi một "trang" có K mục. Điều này có thể được thực hiện mà không cần phải đọc tất cả (N-1) * K trước mục (một lần nữa và một lần nữa, đó là O (N^2))? Xin vui lòng, tôi sẽ đánh giá cao câu trả lời của bạn làm thế nào để có được trực tiếp pageN. –
Nếu tôi hiểu chính xác, để hoàn thành những gì bạn đã mô tả, bạn sẽ tạo tài nguyên con bằng cách sử dụng Tham số đường dẫn URL hoặc Tham số chuỗi truy vấn URL. Khi đã được cấu hình (Yêu cầu tích hợp - ánh xạ cơ thể và ánh xạ params), bạn sẽ có thể có được các kết quả cụ thể dựa trên các tham số mà bạn chuyển tới tài nguyên (và do đó phương thức). Tôi biết bài đăng này cũ, nhưng có thể giúp những người đang tìm kiếm trợ giúp ngay bây giờ. – Ephexx
có một cơ hội tốt bạn muốn một cái gì đó như thế này:
qms = tms.query(hash_key=415772421368583351, max_results=2, exclusive_start_key=None)
for i in qms:
print i
lek = qms.last_evaluated_key
qms = tms.query(hash_key=415772421368583351, max_results=2, exclusive_start_key=lek)
for i in qms:
print i
của khóa học này là một ví dụ ngớ ngẩn cho cuộc biểu tình.
Chìa khóa ở đây là sử dụng last_evaluated_key
không phải là exclusive_start_key
- 1. Amazon DynamoDB mapping enums
- 2. Amazon DynamoDB InvalidSignatureException
- 3. Thiết kế các bảng trong Amazon dynamodb
- 4. Amazon S3 boto - cách xóa thư mục?
- 5. Viết một hàng đợi phân tán trong DynamoDB
- 6. Truy cập dữ liệu trên DynamoDB của Amazon qua JavaScript
- 7. Cách tạo url tạm thời để tải tệp lên Amazon S3 bằng thư viện boto?
- 8. Lấy mã HIT khi tạo HIT ở Amazon Mturk bằng Boto
- 9. Cách nhận tất cả thư trong hàng đợi SQS của Amazon bằng thư viện boto bằng Python?
- 10. Tải lên tệp bằng boto
- 11. Boto Amazon S3: Làm cách nào để đổi tên một tệp trong một nhóm?
- 12. DynamoDB Perl Abstraction
- 13. Làm thế nào để sao chép một khóa trong Amazon S3 bằng cách sử dụng Python (và boto)?
- 14. HITs nhóm thành lô trong máy trộn amazon cơ khí với boto?
- 15. Xử lý hàng đợi SQS bằng boto
- 16. Hết hạn đối tượng S3 bằng boto
- 17. DynamoDB cho các phiên PHP
- 18. Python Boto Dynamodb hiệu suất rất chậm cho thu nhỏ thiết lập kỷ lục trên các phím phạm vi
- 19. Lưu trữ chuỗi thời gian trong AWS DynamoDb
- 20. Tạo báo cáo từ Dynamodb
- 21. 400 Yêu cầu không hợp lệ trong khi kéo các trường hợp bằng amazon
- 22. Amazon DynamoDB Nhận các mục có giá trị thuộc tính ... (Java API)
- 23. Dịch vụ trang web Amazon: python hoặc ruby?
- 24. Có một cơ sở dữ liệu phụ trợ tốt ở Django cho Amazon DynamoDB không?
- 25. SimpleDB Chọn VS DynamoDB Quét
- 26. Làm thế nào để nhận được tin nhắn được đếm trong SQS của Amazon bằng cách sử dụng thư viện boto bằng Python?
- 27. Boto - tập tin tải lên đến một vị trí cụ thể trên Amazon S3
- 28. Thiết lập thông số hadoop với boto?
- 29. Cân bằng tải trong Amazon EC2?
- 30. cách lấy dữ liệu từ dynamodb bằng cách sử dụng phần còn lại api
Cảm ơn, công trình này hoạt động. Tôi đoán tôi đã tìm cách để có được exclusive_start_key. Btw bạn có thể có một lúng túng khác trong mã. –
Tôi biết câu lệnh "else" có vẻ lạ;) Nhưng trên thực tế, nó được kích hoạt khi vòng lặp "for" thực hiện chính xác 0 lần lặp. http://psung.blogspot.ca/2007/12/for-else-in-python.html – yadutaf
Tôi không biết về điều đó. Cảm ơn! –