Bird
Raised Fist0
DynamoDBquery~20 mins

Boto3 (Python) client vs resource in DynamoDB - Practice Questions

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Boto3 DynamoDB Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Difference in method usage between client and resource
Which statement correctly describes how you would retrieve an item from a DynamoDB table using Boto3 client vs resource?
AClient uses get_item with TableName parameter; resource uses Table object with get_item method without TableName.
BClient and resource do not support get_item method.
CBoth client and resource require TableName parameter in get_item method.
DClient uses Table object with get_item method; resource uses get_item with TableName parameter.
Attempts:
2 left
💡 Hint
Think about how client and resource interfaces differ in method calls.
❓ query_result
intermediate
2:00remaining
Output of scan operation using client vs resource
Given the following code snippets, what is the type of the output returned by each scan operation? Client: ```python dynamodb_client = boto3.client('dynamodb') response = dynamodb_client.scan(TableName='MyTable') ``` Resource: ```python dynamodb_resource = boto3.resource('dynamodb') table = dynamodb_resource.Table('MyTable') response = table.scan() ```
AClient returns a dict with raw DynamoDB JSON; resource returns a dict with Python native types.
BClient returns a list of items; resource returns a dict with raw DynamoDB JSON.
CBoth client and resource return a list of items as Python dicts.
DClient returns a dict with Python native types; resource returns a list of items.
Attempts:
2 left
💡 Hint
Consider how Boto3 client and resource handle data types in responses.
📝 Syntax
advanced
2:00remaining
Correct syntax to update an item using resource
Which of the following code snippets correctly updates an attribute 'status' to 'active' for a given key in a DynamoDB table using Boto3 resource?
Atable.update_item(Key={'id': '123'}, UpdateExpression='SET status = active')
Btable.update_item(Key={'id': '123'}, UpdateExpression='SET status = :val', ExpressionAttributeValues={':val': {'S': 'active'}})
Ctable.update_item(Key={'id': '123'}, UpdateExpression='SET status = :val', ExpressionAttributeValues={':val': 'active'})
Dtable.update_item(Key={'id': '123'}, UpdateExpression='SET status = :val', ExpressionAttributeValues={':val': active})
Attempts:
2 left
💡 Hint
Remember how resource expects Python native types in ExpressionAttributeValues.
❓ optimization
advanced
2:00remaining
Choosing client or resource for batch writes
You want to write 1000 items to a DynamoDB table efficiently. Which approach is better and why?
AUse resource's put_item method for each item because it is simpler.
BUse resource's batch_writer() because it automatically handles buffering and retries.
CUse client put_item in a loop because it gives more control over each write.
DUse client batch_write_item with single item per request for simplicity.
Attempts:
2 left
💡 Hint
Think about how batch_writer helps with large writes.
🔧 Debug
expert
2:00remaining
Why does this client code raise a ValidationException?
Consider this client code snippet: ```python response = dynamodb_client.get_item(Key={'id': '123'}, TableName='MyTable') ``` It raises a ValidationException with message: "One or more parameter values were invalid: Type mismatch for key id expected: S actual: N". What is the cause?
AThe key value '123' is passed as a plain string instead of DynamoDB JSON format with type.
BThe TableName parameter is missing from the get_item call.
CThe key attribute 'id' is missing from the Key dictionary.
DThe key value type does not match the table's key schema; it expects a string but got a number.
Attempts:
2 left
💡 Hint
Check the expected data type of the key attribute in the table schema.

Practice

(1/5)
1. What is the main difference between Boto3 client and resource when working with DynamoDB?
easy
A. client is deprecated, resource is the new standard.
B. client is only for S3, resource is only for DynamoDB.
C. client is low-level and matches AWS API calls exactly, while resource is higher-level and easier to use.
D. client automatically manages retries, resource does not.

Solution

  1. Step 1: Understand the roles of client and resource

    The client provides direct access to AWS service APIs with low-level calls, matching the exact API structure.
  2. Step 2: Compare with resource abstraction

    The resource offers a higher-level, object-oriented interface that simplifies interactions with AWS services like DynamoDB.
  3. Final Answer:

    client is low-level and matches AWS API calls exactly, while resource is higher-level and easier to use. -> Option C
  4. Quick Check:

    client = low-level, resource = high-level [OK]
Hint: Client = low-level API, resource = easier Python objects [OK]
Common Mistakes:
  • Thinking client is deprecated
  • Confusing client and resource usage scope
  • Assuming resource has full API coverage
2. Which of the following is the correct way to create a DynamoDB resource using Boto3 in Python?
easy
A. dynamodb = boto3.client('dynamodb')
B. dynamodb = boto3.resource('dynamodb')
C. dynamodb = boto3.connect('dynamodb')
D. dynamodb = boto3.session('dynamodb')

Solution

  1. Step 1: Recall Boto3 resource creation syntax

    To create a resource, use boto3.resource('service_name'). For DynamoDB, it is boto3.resource('dynamodb').
  2. Step 2: Identify incorrect options

    boto3.client('dynamodb') creates a client, not a resource. connect and session are not valid Boto3 methods for this purpose.
  3. Final Answer:

    dynamodb = boto3.resource('dynamodb') -> Option B
  4. Quick Check:

    Resource creation uses boto3.resource('service') [OK]
Hint: Use boto3.resource('dynamodb') for resource creation [OK]
Common Mistakes:
  • Using boto3.client instead of boto3.resource
  • Trying to use boto3.connect which doesn't exist
  • Confusing session with resource creation
3. Given the following code snippet using Boto3 resource:
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')
response = table.get_item(Key={'UserId': '123'})
print(response['Item']['Name'])
What will this code print if the item exists with Name 'Alice'?
medium
A. 123
B. None
C. KeyError
D. Alice

Solution

  1. Step 1: Understand the get_item call on resource Table

    The get_item method returns a dictionary with an 'Item' key containing the requested item if it exists.
  2. Step 2: Access the 'Name' attribute from the returned item

    The code prints response['Item']['Name'], which will be 'Alice' if the item exists with that attribute.
  3. Final Answer:

    Alice -> Option D
  4. Quick Check:

    response['Item']['Name'] = Alice [OK]
Hint: get_item returns dict with 'Item' key holding data [OK]
Common Mistakes:
  • Assuming response is just the item dict
  • Forgetting to check 'Item' key
  • Confusing client and resource response formats
4. What is wrong with this Boto3 client code snippet for DynamoDB?
import boto3
client = boto3.client('dynamodb')
response = client.get_item(TableName='Users', Key={'UserId': '123'})
print(response['Item'])
medium
A. The Key value should be a dict with attribute type, e.g., {'UserId': {'S': '123'}}
B. TableName should be lowercase 'users'
C. client.get_item does not exist, use resource instead
D. print statement should be print(response.Item)

Solution

  1. Step 1: Check the Key format for client get_item

    When using the low-level client, the Key must specify attribute types, e.g., {'UserId': {'S': '123'}}.
  2. Step 2: Identify other issues

    TableName is case-sensitive and usually capitalized as in the table creation. The method get_item exists on client. The print syntax is correct for a dict.
  3. Final Answer:

    The Key value should be a dict with attribute type, e.g., {'UserId': {'S': '123'}} -> Option A
  4. Quick Check:

    Client Key needs attribute type dict [OK]
Hint: Client Key needs attribute type dict like {'S': 'value'} [OK]
Common Mistakes:
  • Using simple dict for Key with client
  • Assuming client and resource Key formats are same
  • Ignoring case sensitivity of TableName
5. You want to update an item attribute in DynamoDB using Boto3. Which approach correctly uses the resource and client to update the attribute 'Age' to 30 for UserId '123'?
hard
A. Resource: table.update_item(Key={'UserId': '123'}, UpdateExpression='SET Age = :val', ExpressionAttributeValues={':val': 30}) Client: client.update_item(TableName='Users', Key={'UserId': {'S': '123'}}, UpdateExpression='SET Age = :val', ExpressionAttributeValues={':val': {'N': '30'}})
B. Resource: table.update_item(Key={'UserId': {'S': '123'}}, UpdateExpression='SET Age = :val', ExpressionAttributeValues={':val': {'N': '30'}}) Client: client.update_item(TableName='Users', Key={'UserId': '123'}, UpdateExpression='SET Age = :val', ExpressionAttributeValues={':val': 30})
C. Resource: table.put_item(Item={'UserId': '123', 'Age': 30}) Client: client.put_item(TableName='Users', Item={'UserId': {'S': '123'}, 'Age': {'N': '30'}})
D. Resource: table.update_item(Key={'UserId': '123'}, UpdateExpression='ADD Age :val', ExpressionAttributeValues={':val': 30}) Client: client.update_item(TableName='Users', Key={'UserId': {'S': '123'}}, UpdateExpression='ADD Age :val', ExpressionAttributeValues={':val': {'N': '30'}})

Solution

  1. Step 1: Understand resource update_item usage

    Resource expects simple Python types for Key and ExpressionAttributeValues, so {'UserId': '123'} and {':val': 30} are correct.
  2. Step 2: Understand client update_item usage

    Client requires attribute types in Key and ExpressionAttributeValues, so {'UserId': {'S': '123'}} and {':val': {'N': '30'}} are needed.
  3. Step 3: Confirm UpdateExpression syntax

    Using SET Age = :val is correct for updating an attribute value.
  4. Final Answer:

    Resource and client update_item calls with correct Key and ExpressionAttributeValues formats as in option A -> Option A
  5. Quick Check:

    Resource uses plain types, client uses typed dicts [OK]
Hint: Resource uses plain dicts; client needs typed attribute dicts [OK]
Common Mistakes:
  • Mixing client and resource Key formats
  • Using ADD instead of SET for update
  • Passing raw values in client ExpressionAttributeValues
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard