Использование boto3 для получения определенного идентификатора пользователя - PullRequest
0 голосов
/ 26 сентября 2019

Я запускаю скрипт, который по сути будет искать "приглашение_ид" пользователя в моей таблице динамо-базы данных.По сути, я пишу блок «Попробуй и поймай», в котором я хочу, чтобы он выдавал ошибку, если приглашение_ид не существует.Кажется, не выплевывает 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

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

В соответствии с документацией boto3 для операции GetItem в Dynamodb:

Операция GetItem возвращает набор атрибутов для элемента с заданным первичным ключом.Если соответствующий элемент не найден, GetItem не возвращает никаких данных, и в ответе не будет элемента Item.

Таким образом, не будет возникать никаких исключений в случае, если не найдено совпадающего приглашения.Однако элемент «Элемент» не будет присутствовать в ответе.Вы можете проверить ответ и вызвать «Ошибка значения», если элемент Item отсутствует.

@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
0 голосов
/ 26 сентября 2019

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

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

Поскольку get_item ничего не возвращает или не вызывает никаких исключений, если идентификатор приглашения не указанв таблице ваш оператор try успешно выполнен.Попробуйте выполнить проверку, чтобы проверить, возвращаются ли какие-либо записи, в противном случае выдается исключение.

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