web-dev-qa-db-ja.com

DynamoDBのBoto3で予約語を使用したProjectionExpressionを使用する

Boto3を使用してDynamoDBデータベースからデータを選択しています

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(table_name)
response = table.scan(ProjectionExpression='Id,Name')['Items']

正常に動作します。次に、(残念ながら)予約語で名前が付けられた属性を取得したいと思います。たとえば、CONNECTIONとしましょう。

response = table.scan(ProjectionExpression='Id,Name,Connection')['Items']

次のようなエラーが発生します

スキャン操作の呼び出し時にエラーが発生しました(ValidationException):無効なProjectionExpression:属性名は予約済みのキーワードです。予約済みキーワード:接続

フィルターやクエリを使用する場合にエイリアシングテクニックがあることは知っていますが、これはboto3からの単純なプロジェクションに存在しますか?

6
Kirk Broadhurst

これは、DynamoDB APIを直接呼び出す場合と同じように簡単に解決できることがわかります。

予約済みのWordにはエイリアスを使用し、エイリアスから「true」名へのマッピングを ExpressionAttributeName パラメータ/プロパティで提供する必要があります。

response = table.scan(ProjectionExpression = 'Id, Name, #c',
                      ExpressionAttributeNames = {'#c': 'Connection'})['Items']
17
Kirk Broadhurst