Conditional expressions help you check if certain conditions are true before changing data in your database. This keeps your data safe and accurate.
You want to add a new item only if it does not already exist.
You want to update a value only if it matches a specific current value.
You want to delete an item only if it meets certain criteria.
You want to avoid overwriting data accidentally.
You want to make sure a number is within a range before updating it.
Syntax
DynamoDB
ConditionExpression = "attribute_exists(attributeName) AND attribute_not_exists(otherAttribute)"# Use placeholders for attribute names and values:
ExpressionAttributeNames = {"#attr": "attributeName"}
ExpressionAttributeValues = {":val": value}
Use ConditionExpression to write your condition.
Use placeholders like #attr and :val to avoid conflicts with reserved words.
Examples
Only add a new item if the UserID does not exist yet.
This code adds a new user to the 'Users' table only if the UserID 'user123' is not already there. If the UserID exists, it will not add and will raise an error.
DynamoDB
import boto3
# Connect to DynamoDB
client = boto3.client('dynamodb')
table_name = 'Users'# Try to add a new user only if UserID does not exist
response = client.put_item(
TableName=table_name,
Item={
'UserID': {'S': 'user123'},
'Name': {'S': 'Alice'},
'Age': {'N': '30'}
},
ConditionExpression='attribute_not_exists(UserID)'
)
print('User added successfully')
OutputSuccess
Important Notes
If the condition is false, DynamoDB returns a ConditionalCheckFailedException.
Always use condition expressions to avoid accidental data loss.
Summary
Conditional expressions let you control when data changes happen.
They help keep your data safe and consistent.
Use placeholders to avoid conflicts with reserved words.
Practice
(1/5)
1. What is the main purpose of using ConditionExpression in a DynamoDB operation?
easy
A. To create a new table automatically
B. To speed up the query execution
C. To ensure the operation only happens if certain conditions are met
D. To backup data before updating
Solution
Step 1: Understand what ConditionExpression does
ConditionExpression is used to specify rules that must be true for the operation to proceed.
Step 2: Identify the purpose in data safety
This helps prevent unwanted changes by checking conditions before updating or deleting.
Final Answer:
To ensure the operation only happens if certain conditions are met -> Option C
But it returns a validation error. What is the likely cause?
medium
A. Using total directly without placeholder in ConditionExpression
B. Using incorrect operator in ConditionExpression
C. Missing ExpressionAttributeNames for reserved word total
D. Missing comma in ExpressionAttributeValues
Solution
Step 1: Check if total is reserved
total is a reserved word in DynamoDB, so it must use a placeholder like #pr.
Step 2: Identify missing placeholder usage
The ConditionExpression uses total directly, causing validation error.
Final Answer:
Using total directly without placeholder in ConditionExpression -> Option A
Quick Check:
Reserved words need placeholders [OK]
Hint: Always use placeholders for reserved words in conditions [OK]
Common Mistakes:
Ignoring reserved word rules
Assuming operators cause error
Overlooking syntax in ExpressionAttributeValues
5. You want to update a user's score only if the current score is less than 100 and the status is active. Which is the correct ConditionExpression to use?
hard
A. "score < 100 AND status = 'active'" without placeholders
B. "#sc < :maxScore AND #st = :activeStatus" with ExpressionAttributeNames {"#sc": "score", "#st": "status"} and ExpressionAttributeValues {":maxScore": 100, ":activeStatus": "active"}
C. "score <= 100 OR status = 'active'" with placeholders
D. "#sc > :maxScore AND #st = :activeStatus" with placeholders
Solution
Step 1: Use placeholders for reserved words
Both score and status can be reserved, so use #sc and #st.
Step 2: Combine conditions correctly
Use AND to require both conditions: score less than 100 and status equals active.
Step 3: Use correct operators and values
Use < for less than, and equals = for status check with placeholders for values.
Final Answer:
"#sc < :maxScore AND #st = :activeStatus" with ExpressionAttributeNames {"#sc": "score", "#st": "status"} and ExpressionAttributeValues {":maxScore": 100, ":activeStatus": "active"} -> Option B
Quick Check:
Use AND with placeholders for multiple conditions [OK]
Hint: Use AND and placeholders for multiple conditions [OK]
Common Mistakes:
Using OR instead of AND
Not using placeholders for reserved words
Using wrong comparison operators
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.