Как заменить переменные для запроса атрибутов DynamoDB? - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь обобщить запрос DynamoDB, используя лямбда-функцию Python.Существует множество примеров установки ProjectionExpression для включения фактических значений атрибутов в базу данных, например, ProjectionExpression = 'cats, dogs'.Я не могу найти примеры атрибутов, устанавливаемых в переменную, такую ​​как ниже.Я хочу передать значения атрибутов для извлечения с помощью события строки запроса.

attr1 = 'cats'
attr2 = 'dogs'
response = table.query(
    IndexName='pets-index',
    KeyConditionExpression=Key(queryparamKey).eq(queryparamKeyID),
    # Get two attr
    # Does not work
    #ProjectionExpression="attr1, attr2"
    # Neither does this
    #ExpressionAttributeNames='{"#attr1":attr1,"#attr2":attr2}'
)

Это идея, но она предназначена для javascript и использует ExpressionAttributeNames.

Это не может быть все это эзотерическим, но я только сейчас сталкиваюсь с Python, и я не нашел никаких сообщений.Пожалуйста, сообщите.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Из-за некоторых дополнительных затруднений с синтаксисом Python я обнаружил, что это работает:

ProjectionExpression=attr1+","+attr2

ProjectionExpression = 'attr, attr2' не оценивался правильно, поэтому я получил KeyError, когда попытался создатьответ как:

'body': response['Items'][0][attr1]+"|"+response['Items'][0][attr2]

Надеюсь, это спасет некоторых новичков Python от некоторых колебания.

0 голосов
/ 05 марта 2019

Скажите, если вы хотите получить только attr1 и attr2 из таблицы, используя pets-index, где ключ разделения pet_type равен cats, это должно работать:

response = table.query(
    IndexName='pets-index',
    KeyConditionExpression='pet_type = :value',
    ExpressionAttributeValues={
        ':value': {'S': 'cats'}
    },
    ProjectionExpression='attr1,attr2'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...