使用Python查询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'

数据库

enter image description here

我认为我可能无法正确处理异常?

解决方法

来自documentation

如果没有匹配的项目,则GetItem不会返回任何数据,并且响应中将没有Item元素。

所以您需要捕获KeyError而不是ClientError。