I am having difficulty with the Boto3/DynamoDB BatchGetItem operation. I would greatly appreciate any help or guidance! I'm pretty new to python/aws so sorry in advanced if this is a novice question.
When I perform the operation, I get this error:
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the BatchGetItem operation: The provided key element does not match the schema
Here is my code:
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
response = dynamodb.batch_get_item(
RequestItems={
'test': {
'Keys': [
{
'item_ID': {
'S': '1'
}
},
{
'item_ID': {
'S': '2'
}
}
],
'ProjectionExpression': 'item_ID, color',
}
}
)
This is a screen-cap of the items in the table.
This is a screen-cap of the table details, showing the partition key is 'item_ID' and that it's a 'string'
Here is the fulll error message:
Traceback (most recent call last):
File "C:/Users/Henry Miller/PycharmProjects/bioinformatics_webapp/get_items.py", line 18, in <module>
'ProjectionExpression': 'item_ID, color',
File "C:\Users\Henry Miller\PycharmProjects\bioinformatics_webapp\venv\lib\site-packages\boto3\resources\factory.py", line 520, in do_action
response = action(self, *args, **kwargs)
File "C:\Users\Henry Miller\PycharmProjects\bioinformatics_webapp\venv\lib\site-packages\boto3\resources\action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "C:\Users\Henry Miller\PycharmProjects\bioinformatics_webapp\venv\lib\site-packages\botocore\client.py", line 314, in _api_call
return self._make_api_call(operation_name, kwargs)
File "C:\Users\Henry Miller\PycharmProjects\bioinformatics_webapp\venv\lib\site-packages\botocore\client.py", line 612, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the BatchGetItem operation: The provided key element does not match the schema
Answering my own question here... but it turns out that you need to use boto3.client instead of boto3.resouce. Here is the updated code which works:
import boto3
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
client = boto3.client('dynamodb', region_name='us-west-2')
response = client.batch_get_item(
RequestItems={
'test': {
'Keys': [
{
'item_ID': {
'S': '1'
}
},
{
'item_ID': {
'S': '2'
}
}
],
'ProjectionExpression': 'item_ID, color',
}
}
)
And here was the response:
"C:\Users\Henry Miller\PycharmProjects\bioinformatics_webapp\venv\Scripts\python.exe" "C:/Users/Henry Miller/PycharmProjects/bioinformatics_webapp/get_items.py"
{'Responses': {'test': [{'item_ID': {'S': '1'}, 'color': {'S': 'red'}}, {'item_ID': {'S': '2'}, 'color': {'S': 'blue'}}]}, 'UnprocessedKeys': {}, 'ResponseMetadata': {'RequestId': 'BAH1SHCBHOMRJMJ5AHE7VRTON3VV4KQNSO5AEMVJF66Q9ASUAAJG', 'HTTPStatusCode': 200, 'HTTPHeaders': {'server': 'Server', 'date': 'Tue, 31 Jul 2018 04:15:13 GMT', 'content-type': 'application/x-amz-json-1.0', 'content-length': '130', 'connection': 'keep-alive', 'x-amzn-requestid': 'BAH1SHCBHOMRJMJ5AHE7VRTON3VV4KQNSO5AEMVJF66Q9ASUAAJG', 'x-amz-crc32': '1917096114'}, 'RetryAttempts': 0}}
Process finished with exit code 0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With