python - boto3 DynamoDB - 查询操作 : ExpressionAttributeNames contains invalid key

标签 python amazon-web-services amazon-dynamodb boto3

我有以下源代码来过滤 DynamoDB 中的项目。

    ...
    session = boto3.session.Session()
    db = session.resource('dynamodb', region_name=region, endpoint_url=endpoint)
    self.table_obj = db.Table(table_name)

    filter_expression = ':status_name <> :status_val'
    attr_names = {'status_name': 'status'}
    attr_values = {'status_val': 'UPDATED'} 

    response = table.query(FilterExpression=filter_expression,
                           ExpressionAttributeNames=attr_names,
                           ExpressionAttributeValues=attr_values)

但是,我收到以下错误:

ClientError: An error occurred (ValidationException) when calling the Query operation: ExpressionAttributeNames contains invalid key: Syntax error; key: "status_name"

我看不出上面的代码有什么问题,我是否遗漏了什么?

最佳答案

根据 Expression Attribute Name documentation

An expression attribute name is a placeholder that you use in an Amazon DynamoDB expression as an alternative to an actual attribute name. An expression attribute name must begin with a pound sign (#), and be followed by one or more alphanumeric characters.

我认为您缺少占位符属性名称中的井号 (#)。

尝试改变这一点

attr_names = {'status_name': 'status'}

attr_names = {'#status_name': 'status'}

关于python - boto3 DynamoDB - 查询操作 : ExpressionAttributeNames contains invalid key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58530370/

相关文章:

amazon-web-services - HAProxy 和 AWS loadBalancer - 503 错误

amazon-web-services - Dynamodb 检查主键和另一个字段的唯一性

javascript - 是否可以从另一个嵌套箭头函数访问箭头函数的参数?

python - 无法从我的数据库访问某些信息与 django 的多对多关系

Python 在特定子字符串前提取一个十进制数

java - DynamoDb.创建时有条件写入。通过字段检查是否不等于(NE)

amazon-web-services - 当 AWS ElasticBeanstalk 扩展到另一台服务器时,它似乎在准备就绪之前就使其可用?

javascript - Lambda 上的 AWS DynamoDB 不返回插入的数据

python - 值错误 : Cannot set a frame with no defined index and a value that cannot be converted to a Series

python - Python 中的异常值校正