You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3 DynamoDB Scan含Contains过滤器无结果问题排查

问题排查与解决

你的问题出在ExpressionAttributeValues的格式上。你使用的是Boto3的DynamoDB表资源(Table Resource)高层接口,它会自动推断数据类型,不需要像客户端(Client)接口那样显式指定类型标记(比如{'S': search})。

修正后的代码如下:

search = "SomeProductText"
response = table.scan(
    FilterExpression='contains(product_text, :pt)',
    ExpressionAttributeValues={
        ':pt': search  # 直接传字符串,无需类型标记
    }
)
print(response['Items'])

while 'LastEvaluatedKey' in response:
    response = table.scan(
        ExclusiveStartKey=response['LastEvaluatedKey'],
        FilterExpression='contains(product_text, :pt)',
        ExpressionAttributeValues={
            ':pt': search
        }
    )
    print(response['Items'])

原因说明

表资源的scan方法属于Boto3的高层封装,会根据传入的值自动映射到DynamoDB的对应数据类型(比如字符串会自动处理为S类型)。你之前的写法是客户端接口的格式,用在资源接口里会让DynamoDB把{'S': 'SomeProductText'}当成嵌套结构去匹配,自然无法找到对应的数据条目。

内容的提问来源于stack exchange,提问作者The amateur programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:08:30