boto:ResourceNotFoundException Dynamodb

时间:2016-08-03 01:36:01

标签: python-2.7 amazon-dynamodb boto3

我有一个表 - user_details,目前有500个读/写容量+ 500个索引以及超过5个项目。我根据用户名查询表,它似乎给了我" ResourceNotFoundException"所有的时间 -

ClientError: An error occurred (ResourceNotFoundException) when calling the Query operation: Requested resource not found

user_details_db_client = boto3.resource(dynamo_string, us_west_2).Table(user_details)

def if_details_exists_for_user(username,region = None):
    time.sleep(1)
    result = None

    try:
            if region:
                    #result = user_details_db_client.scan(FilterExpression=Attr('username').eq(username) & Attr('region').eq(region))
                    result = user_details_db_client.query(IndexName = "username-index", KeyConditionExpression = Key('username').eq(username), FilterExpression=Attr('region').eq(region))
            else:
                    result = user_details_db_client.query(IndexName = "username-index", KeyConditionExpression = Key('username').eq(username))
                    #result = user_details_db_client.scan(FilterExpression=Attr('username').eq(username))

            if result and result['Items']:
                    logger.info("User {} exists in user_details table for region {}".format(username,region))

                    return (True, result['Items'])
            else:
                    return (False, FAILED)

    except Exception:
            logger.error("Caught exception : {} while getting data from user_details table".format(traceback.format_exc()))
            return (False, FAILED)

我可以确认该表存在,而其他脚本正在使用它。我尝试在doc或某处找到但却无法得到具体的推理。

我该如何调试?或者我完全错过了一些东西?

1 个答案:

答案 0 :(得分:4)

我会查看该表是否确实存在。 boto3库在这里有一个令人惊讶的行为。这一行:

user_details_db_client = boto3.resource(dynamo_string, us_west_2).Table(user_details)
即使表格不存在,

也会成功。 (明智地说,请注意,这是一个"资源",而不是"客户")。

要查看哪些表存在,请尝试查看可用的子资源,或使用" list_tables"命令

boto3.resource(dynamo_string, us_west_2).get_available_subresources()

boto3.client(dynamo_string, us_west_2).list_tables()

在那里,您将能够看到您正在寻找的表格是否存在。