Запрос к DynamoDB с помощью Python

#python #boto3 #dynamodb-queries

#python #amazon-dynamodb #boto3 #dynamodb-запросы

Вопрос:

При запросе таблицы DynamoDB код отлично работает для допустимой записи (msisdn), однако для несуществующих записей происходит сбой.

 import boto3
from botocore.exceptions import ClientError

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('PhoneList')

# Phone Number 
# -> Existent: 44790000000
msisdn = 44790000000

try:
    response = table.get_item(Key={'MSISDN': msisdn})
    
    name = response['Item']['Name']
    ID = str(response['Item']['ID'])
    birth = response['Item']['Birth']
    
except ClientError as e:
    print(e.response['Error']['Message'])
    print("Phone number not found")
    exit(-1)

print("Phone:", msisdn)
print("Name:", name)
print("ID:", id)
print("Birth:", birth)
  

Недопустимая запись

 Traceback (most recent call last):
  File "dyn.py", line 15, in <module>
    name = response['Item']['Name']
KeyError: 'Item'
  

База данных

введите описание изображения здесь

Я думаю, что, возможно, я неправильно обработал исключение?

Ответ №1:

из документации

Если нет соответствующего элемента, GetItem не возвращает никаких данных, и в ответе не будет элемента Item.

итак, вам нужно перехватить KeyError вместо ClientError.