Python DynamoDB: Using LIMIT in Queries with Boto3
Last updated 7 months, 2 weeks ago | 616 views 75 5
DynamoDB doesn’t have a traditional SQL-style LIMIT clause. Instead, it offers the ability to limit the number of items returned in a query or scan using the Limit parameter. This is extremely useful for pagination, performance, and cost control.
In this guide, we’ll walk through how to use Limit effectively in DynamoDB with Python and Boto3.
Table of Contents
-
Understanding LIMIT in DynamoDB
-
Prerequisites
-
Using Limit in a
scan()Operation -
Using Limit in a
query()Operation -
Pagination with LastEvaluatedKey
-
Complete Example with Pagination
-
Tips and Best Practices
-
Common Pitfalls
-
Conclusion
1. Understanding LIMIT in DynamoDB
-
Limitcontrols the maximum number of items returned by aquery()orscan()request. -
It does not guarantee total number of results unless you check for
LastEvaluatedKey. -
Can be used for pagination, preview results, or testing performance.
Important: DynamoDB internally pages results in 1MB chunks. If a
Limitis higher than what fits in 1MB, the request may still be paged.
⚙️ 2. Prerequisites
Make sure you have:
-
A DynamoDB table (e.g.,
Users) -
Python and
boto3installed:
pip install boto3
-
AWS credentials configured via
aws configure
Sample table: Users
Primary Key: user_id (partition key)
3. Using Limit in a scan() Operation
The scan() method reads every item in the table but can be limited using the Limit parameter.
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')
response = table.scan(Limit=5)
items = response['Items']
print("First 5 items:")
for item in items:
print(item)
⚠️ Use
scan()with caution for large tables — it’s expensive and slow.
4. Using Limit in a query() Operation
The query() method retrieves items that match a partition key, and can also be limited.
response = table.query(
KeyConditionExpression=boto3.dynamodb.conditions.Key('user_id').eq('001'),
Limit=3
)
items = response['Items']
print("First 3 items for user_id=001:")
for item in items:
print(item)
5. Pagination with LastEvaluatedKey
DynamoDB won’t return more than your Limit, or beyond 1MB of data. To fetch the next "page", you must use the LastEvaluatedKey.
Example:
response = table.scan(Limit=5)
items = response['Items']
last_key = response.get('LastEvaluatedKey')
while last_key:
response = table.scan(Limit=5, ExclusiveStartKey=last_key)
items.extend(response['Items'])
last_key = response.get('LastEvaluatedKey')
6. Complete Example with Pagination Function
import boto3
def scan_with_limit(table_name, limit):
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(table_name)
response = table.scan(Limit=limit)
items = response['Items']
last_key = response.get('LastEvaluatedKey')
print(f"Fetched {len(items)} items:")
for item in items:
print(item)
if last_key:
print("\nMore items available. Use `ExclusiveStartKey` to continue.\n")
else:
print("\nEnd of data reached.")
# Run it
scan_with_limit('Users', 5)
7. Tips and Best Practices
| Tip | Reason |
|---|---|
✅ Use Limit to reduce read costs |
Reads fewer items |
✅ Combine with LastEvaluatedKey for pagination |
Handles large result sets |
✅ Prefer query() over scan() |
More efficient |
❌ Don't assume Limit=5 always returns 5 items |
May return fewer |
❌ Don't forget to check LastEvaluatedKey |
You might miss remaining data |
⚠️ 8. Common Pitfalls
| Pitfall | Fix |
|---|---|
❌ Using scan() on large datasets |
Use query() or filter+partition |
❌ Ignoring LastEvaluatedKey |
Results may be incomplete |
❌ Confusing Limit with filtering |
Use FilterExpression separately |
| ❌ Expecting sorted results | DynamoDB does not sort unless sort key is queried |
❌ Using Limit as security control |
It only limits returned results, not access |
✅ 9. Conclusion
The Limit parameter in DynamoDB is essential when you need to:
-
Page through large datasets
-
Avoid high read costs
-
Fetch previews of data
When paired with LastEvaluatedKey, Limit lets you efficiently and safely paginate through tables, especially in applications like admin dashboards, APIs, or reports.