AWS DynamoDB含特殊字符属性boto3查询失败求助
解决boto3查询含特殊字符属性名的Syntax Error问题
这个问题我之前也碰到过!根源在于DynamoDB的表达式语法规则:当属性名包含空格、括号([])、点号(.)这类特殊字符,或者和DynamoDB保留字冲突时,不能直接在FilterExpression里裸写属性名——控制台之所以能正常执行,是因为它会自动帮你处理这些特殊名称的转义,但boto3需要我们手动指定**表达式属性名(ExpressionAttributeNames)**来规避语法解析错误。
具体解决方案
核心思路是用一个合法的占位符(比如#ah)代替原属性名,再通过ExpressionAttributeNames参数建立占位符和真实属性名的映射。修改后的代码如下:
import boto3 from boto3.dynamodb.conditions import Key, Attr # 初始化DynamoDB资源和表 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('你的表名称') # 执行查询 response = table.query( KeyConditionExpression=Key('id').eq('fasfas'), # 使用占位符#ah代替原属性名 FilterExpression=Attr('#ah').eq(1), # 建立占位符与真实属性名的映射 ExpressionAttributeNames={ '#ah': 'Absolute humidity[g/kg].3' } ) # 获取查询结果 data = response['Items']
关键说明
- 占位符必须以
#开头,后面跟着合法的标识符(字母、数字、下划线,不能以数字开头) - 不管是空格、特殊符号还是保留字属性名,都可以用这种方式处理——你提到的下划线问题,如果是属性名里下划线结合了其他特殊字符(比如
my_attr.name),同样需要用这个方法;单纯的下划线属性名(比如my_attr)是可以直接使用的 ExpressionAttributeNames也适用于KeyConditionExpression、ProjectionExpression等其他需要引用属性名的场景
内容的提问来源于stack exchange,提问作者João Abrantes
相关产品推荐
相关产品推荐

