首页 > 解决方案 > KeyConditionExpression 接受无效输入并且不抛出异常

问题描述

我是 DynamoDB 的新手,并试图通过它的文档以及 boto3 来加强我已经编写了一些代码,这些代码应该查询几个表以获取不同的参数并进行一些计算。它可以工作,但是我还没有实现错误处理。我注意到的是,当我在 .eq(customerName) 中传递一个无效的 customerName 时,它​​不会引发任何相关错误,只是继续进行进一步的计算,这显然会失败。但是,如果我将 Key 从“CustomerName”更改为随机值,它会检测到这一点。如何检查通过 input 输入的 customerName 是否存在,如果不存在,则抛出错误?这个 try-except 没有抓住它。我遇到了与我想要实现的逻辑相似的 attribute_not_exists ,但它不需要密钥。

    try:
        response = table.query(
            KeyConditionExpression=Key('customerName').eq(customerName),
            ProjectionExpression='price',
            )

            # some code

    except ClientError as err:
        logger.info(f"The customer {customerName} doesn't exist: {err}")
        sys.exit(1)

标签: python-3.xerror-handlingamazon-dynamodbboto3

解决方案


在键条件表达式中使用无效键名进行查询会引发异常,因为它是无意义的查询。

查询一个不存在的键值并不是一个错误——这对于您可能遇到的任何数据库来说都是如此。数据库没有任何依据可以得出该值“错误”的结论,因为对于根本找不到的值而言,这并不是一个有意义的概念。

response['Items']包含匹配项的集合。如果没有找到记录,则它没有项目。您应该检查这种情况,如果没有找到记录是您认为意外的事情。


推荐阅读