代码之家  ›  专栏  ›  技术社区  ›  user1187968

boto3 DyanmoDb-查询操作:ExpressionAttributeNames包含无效密钥

  •  0
  • user1187968  · 技术社区  · 6 年前

    我有以下源代码来过滤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"
    

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Juned Ahsan    6 年前

    根据 Expression Attribute Name documentation

    表达式属性名称是在表达式中使用的占位符 Amazon DynamoDB表达式作为实际属性的替代 名称表达式属性名称必须以磅符号(#)开头, 并后跟一个或多个字母数字字符。

    我认为您的占位符属性名称中缺少了英镑(#)。

    试着改变这个

    attr_names = {'status_name': 'status'}
    

    attr_names = {'#status_name': 'status'}
    
    推荐文章