2

i'm trying to check existence of an hash_key in dynamodb with boto (i can not update my filed if exist) i've try with query

   for i in self.table.query(hask_key=[value]):
      print i['url']

But i miss an argument (???). I've try with scan but i need to check my hash_key, not attributes.

I've try with get_item but i cannot manage the response if hash_key does not exist.

Any advice?

I've play with redis and it have exist method.

zebra
  • 435
  • 2
  • 8
  • 20

2 Answers2

7

Rather than doing a query operation, you should just attempt to retrieve the item using get_item. If it exists, the item will be returned. If not, the call will raise a DynamoDBKeyNotFoundError which you can catch. So, something like:

def exists(hash_key):
    try:
        item = self.table.get_item(hash_key=<hash key>...)
    except boto.dynamodb.exceptions.DynamoDBKeyNotFoundError:
        item = None
    return item

would return None if the hash didn't exist and would return the item if it did exist.

garnaat
  • 44,310
  • 7
  • 123
  • 103
4

Just ended up on this page after a google search. Here's a 2020 update:

The API behaviour has changed and is returning either 'the item' or 'nothing', but won't raise an exception: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.get_item

Here is an example of how to use get_item to query for a single item: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/dynamodb.html#getting-an-item

And this SOF answer addresses the specific problem of checking for the existence of an item in a DDB table: https://stackoverflow.com/a/48589589/512155

Jan Groth
  • 14,039
  • 5
  • 40
  • 55