DynamoDB не возвращает значения сканирования

Я пытаюсь запросить свой DynamoDB с помощью сканирования. Однако каждый раз, когда я его сканирую, я получаю следующую ошибку:

"Невозможно упорядочить ответ: двоичный (b` long_string_of_random_alphanumerics) не сериализуемый JSON"

Код:

def login(username, password):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('users')
    response = table.scan(
        FilterExpression=Key('username').eq(username)
    )
    items = response["Items"]
    return items

Кроме того, код не выдает ошибку, когда я кодирую «имя пользователя» bytes(username,"utf-8"). Однако список, который он возвращает, пуст.

Response:
[]

Я выполнил запрос, чтобы проверить, получает ли он какие-либо элементы по первичному ключу, и он возвращает 1, поэтому я не совсем уверен, что я здесь делаю не так.

    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('users')
    response = table.query(
        KeyConditionExpression=Key('username').eq(username)
    )    
    if response["Count"] == 0:
        return False
    else:
        return True

person MrDarkness96    schedule 26.11.2019    source источник


Ответы (1)


Я также столкнулся с той же проблемой сегодня и нашел решение:

 response = table.scan(
             FilterExpression = Attr("SS_username").eq(username) & Attr("SS_password").eq(password)
         ) 

    if response["Count"] == 0:
        return False
    else:
        return True

или любой другой подход, которым кто-то мог бы поделиться?

person Neha    schedule 15.05.2020
comment
Пожалуйста, никогда не делайте if ⟨condition⟩: return False else: return True: просто return not ⟨condition⟩ (или используйте дополнительный оператор отношения для сравнения). - person greybeard; 15.05.2020