【问题标题】:Using boto3 to get specific user ID使用 boto3 获取特定用户 ID
【发布时间】:2019-09-26 14:01:23
【问题描述】:

我正在运行一个脚本,它基本上会在我的 dynamo db 表中查找用户的“invitation_id”。我实际上是在编写一个 try and catch 块,如果invitation_id 不存在,我希望它吐出一个错误。它似乎没有在应该吐出 ValueError 的时候吐出。我不确定我在做什么是否正确。我的脚本如下:

@staticmethod
 def search_delegate():

    CLIENT.get_item(
                    TableName="invtable",
                    Key={
                        'invitation_id': {
                            'S': '123'
                        }
                    }
                )


if __name__ == '__main__':

try:
    AWSDynamoUtils.search_delegate()
    print("Found user")
except:
    raise ValueError

【问题讨论】:

    标签: python python-3.x exception amazon-dynamodb boto3


    【解决方案1】:

    来自 boto3 文档:

    GetItem 操作为具有给定主键的项目返回一组属性。如果没有匹配项,GetItem 不返回任何数据,响应中也不会有 Item 元素。

    由于 get_item 不会返回任何内容,或者如果邀请 id 不在表中,也不会引发任何异常,因此您的 try 语句将成功执行。尝试检查是否有任何记录返回,否则会引发异常。

    entry = AWSDynamoUtils.search_delegate()
    if entry:
        print('Found User')
    else:
        raise ValueError
    

    【讨论】:

    • 你能提供一个你所说的例子吗@Andrysha
    【解决方案2】:

    根据 dynamodb GetItem 操作的 boto3 文档:

    GetItem 操作返回项目的一组属性 给定的主键。如果没有匹配项,GetItem 不会 返回任何数据,响应中不会有 Item 元素。

    因此在没有匹配的invitation_id 的情况下不会引发任何异常。但是,“Item”元素不会出现在响应中。如果 Item 元素不存在,您可以检查响应并引发“Value Error”。

    @staticmethod
     def search_delegate():
    
        return CLIENT.get_item(
                        TableName="invtable",
                        Key={
                            'invitation_id': {
                                'S': '123'
                            }
                        }
                    )
    
    
    if __name__ == '__main__':
    
    response = AWSDynamoUtils.search_delegate()
    if "Item" in response:
        print('Found User')
    else:
        raise ValueError
    

    【讨论】:

    • 你能举例说明你在说什么吗@Harsh Bafna
    • 我在想为什么你有一个退货声明。输出现在很有意义
    • 这取决于您是否希望在 search_delegate 函数本身内进行该检查。我刚刚修改了您的示例代码:-)
    • 我希望响应基本上根据在 dynamodb 中检查的邀请 ID 返回用户的名字、姓氏。那会是一个不同的函数而不是 get_item @Harsh Bafna
    • 我认为应该在 search_delegate 函数本身进行检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多