Bird
Raised Fist0
DynamoDBquery~5 mins

Expression attribute values in DynamoDB

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

Expression attribute values let you safely use values in DynamoDB queries without errors or conflicts.

When you want to insert or update an item with specific values.
When you need to filter items using conditions with values.
When you want to avoid conflicts with reserved words in DynamoDB.
When you want to reuse values in multiple parts of a query safely.
Syntax
DynamoDB
ExpressionAttributeValues = {
  ":key1": value1,
  ":key2": value2
}

Each key starts with a colon (:), like ":val".

Values can be strings, numbers, booleans, or other DynamoDB data types.

Examples
Use this to set the value "Alice" for a name attribute.
DynamoDB
ExpressionAttributeValues = {
  ":name": {"S": "Alice"}
}
Use this to set the value 30 for an age attribute.
DynamoDB
ExpressionAttributeValues = {
  ":age": {"N": "30"}
}
Use this to set a boolean value true for an isActive attribute.
DynamoDB
ExpressionAttributeValues = {
  ":isActive": {"BOOL": true}
}
Sample Program

This command updates the Name attribute of the user with UserId "123" to "Bob" using expression attribute values.

DynamoDB
aws dynamodb update-item \
  --table-name Users \
  --key '{"UserId": {"S": "123"}}' \
  --update-expression "SET #n = :nameVal" \
  --expression-attribute-names '{"#n": "Name"}' \
  --expression-attribute-values '{":nameVal": {"S": "Bob"}}'
OutputSuccess
Important Notes

Always prefix keys in ExpressionAttributeValues with a colon (:).

Use ExpressionAttributeNames to avoid conflicts with reserved words.

Expression attribute values help prevent injection attacks by separating data from code.

Summary

Expression attribute values store values safely for DynamoDB queries.

They use keys starting with a colon (:), like ":val".

They help avoid errors and reserved word conflicts.

Practice

(1/5)
1. What is the main purpose of using ExpressionAttributeValues in DynamoDB queries?
easy
A. To safely provide values for query expressions and avoid reserved word conflicts
B. To define the table name for the query
C. To specify the index to use in the query
D. To set the read capacity units for the table

Solution

  1. Step 1: Understand ExpressionAttributeValues role

    ExpressionAttributeValues hold the actual values used in query expressions, replacing direct values with placeholders.
  2. Step 2: Recognize benefits

    This avoids errors from reserved words and injection issues by using placeholders like ':val'.
  3. Final Answer:

    To safely provide values for query expressions and avoid reserved word conflicts -> Option A
  4. Quick Check:

    ExpressionAttributeValues = safe value placeholders [OK]
Hint: Remember: ExpressionAttributeValues use :key placeholders [OK]
Common Mistakes:
  • Confusing ExpressionAttributeValues with table names
  • Using direct values instead of placeholders
  • Ignoring reserved word conflicts
2. Which of the following is the correct way to define an ExpressionAttributeValues dictionary for a value 25 with key ':age' in DynamoDB?
easy
A. { ':age' = 25 }
B. { 'age': 25 }
C. { ':age': 25 }
D. { ':age' : '25' }

Solution

  1. Step 1: Check syntax for ExpressionAttributeValues

    It must be a dictionary with keys starting with a colon and values as the actual data, e.g., { ':age': 25 }.
  2. Step 2: Validate each option

    { ':age': 25 } uses correct colon prefix and value type. { 'age': 25 } misses colon. { ':age' = 25 } uses '=' which is invalid syntax. { ':age' : '25' } uses string '25' instead of number.
  3. Final Answer:

    { ':age': 25 } -> Option C
  4. Quick Check:

    Use colon keys and proper dictionary syntax [OK]
Hint: Keys must start with ':' and use colon for key-value [OK]
Common Mistakes:
  • Omitting the colon prefix in keys
  • Using '=' instead of ':' in dictionary
  • Putting numbers as strings unnecessarily
3. Given the following DynamoDB query snippet, what will be the value of ExpressionAttributeValues to find items with Price less than 100?
FilterExpression: "Price < :maxPrice"
ExpressionAttributeValues: ???
medium
A. { ':maxPrice': 100 }
B. { 'maxPrice': 100 }
C. { ':maxPrice': '100' }
D. { ':maxPrice': 99 }

Solution

  1. Step 1: Match placeholder in FilterExpression

    The placeholder ':maxPrice' must be defined in ExpressionAttributeValues with the same key including colon.
  2. Step 2: Provide correct value type

    The value should be 100 as a number, not string, to match 'Price < :maxPrice'.
  3. Final Answer:

    { ':maxPrice': 100 } -> Option A
  4. Quick Check:

    Placeholder key with colon and numeric value [OK]
Hint: Match placeholder keys exactly with colon prefix [OK]
Common Mistakes:
  • Missing colon in key
  • Using string instead of number
  • Using wrong numeric value
4. You wrote this DynamoDB query snippet but it throws an error:
FilterExpression: "Quantity = :qty"
ExpressionAttributeValues: { 'qty': 10 }
What is the error and how to fix it?
medium
A. No error; code is correct
B. Value should be string; fix by changing to { ':qty': '10' }
C. FilterExpression syntax wrong; fix by removing colon
D. Missing colon in key; fix by changing to { ':qty': 10 }

Solution

  1. Step 1: Identify key mismatch

    The placeholder in FilterExpression is ':qty' but ExpressionAttributeValues uses 'qty' without colon, causing error.
  2. Step 2: Correct the key format

    Keys in ExpressionAttributeValues must start with colon, so change to { ':qty': 10 } to fix error.
  3. Final Answer:

    Missing colon in key; fix by changing to { ':qty': 10 } -> Option D
  4. Quick Check:

    Keys must match placeholders with colon [OK]
Hint: Keys must start with ':' matching FilterExpression placeholders [OK]
Common Mistakes:
  • Omitting colon in ExpressionAttributeValues keys
  • Changing value type unnecessarily
  • Misunderstanding FilterExpression syntax
5. You want to update an item in DynamoDB to set Status to "Active" only if the current Count is less than 5. Which ExpressionAttributeValues dictionary is correct for this conditional update?
UpdateExpression: "SET Status = :newStatus"
ConditionExpression: "Count < :maxCount"
ExpressionAttributeValues: ???
hard
A. { 'newStatus': 'Active', 'maxCount': 5 }
B. { ':newStatus': 'Active', ':maxCount': 5 }
C. { ':newStatus': 'Active', ':maxCount': '5' }
D. { ':newStatus': Active, ':maxCount': 5 }

Solution

  1. Step 1: Match all placeholders with colon keys

    Both ':newStatus' and ':maxCount' must be keys in ExpressionAttributeValues with colon prefix.
  2. Step 2: Use correct value types

    'Active' is a string, so use quotes. 5 is a number, so no quotes needed. { ':newStatus': 'Active', ':maxCount': 5 } matches this correctly.
  3. Final Answer:

    { ':newStatus': 'Active', ':maxCount': 5 } -> Option B
  4. Quick Check:

    Colon keys with correct string and number values [OK]
Hint: Use colon keys and correct types: strings in quotes, numbers as is [OK]
Common Mistakes:
  • Missing colon in keys
  • Using numbers as strings incorrectly
  • Omitting quotes around string values