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

PynamoDB调用query()返回0条数据但scan()运行正常问题求助

问题排查方向与解决方案
  • 首先排查类型与值匹配问题
    在调用query前添加打印语句,检查id的实际类型和取值,确认和boto3调用时传入的字符串id完全一致(包括大小写、无多余特殊字符):
    print(type(b.id), repr(b.id))
    
    绝大多数此类问题是因为b.id实际为UUID对象而非字符串导致的,可尝试转成字符串后再调用query:
    book = list(Book.query(str(b.id)))
    
    如果仅需要获取单个主键对应的条目,更推荐直接使用get方法:
    book = Book.get(b.id)
    
  • 修正模型定义的默认值错误
    当前id字段的default_for_new参数写法错误,带括号的uuid.uuid4()会在类加载时生成一个固定的UUID值,所有使用默认值的新实例会共享同一个id,正确写法是传入可调用对象本身:
    id = UnicodeAttribute(hash_key=True, null=False, default_for_new=uuid.uuid4)
    
    手动给id赋值时也需要传入字符串类型的UUID值,不要直接传入UUID对象。
  • 检查版本兼容性
    部分旧版本PynamoDB存在主键查询的已知Bug,可升级到最新稳定版后重试:
    pip install --upgrade pynamodb
    
  • 开启调试日志定位请求差异
    开启调试日志查看PynamoDB实际发送到DynamoDB的请求参数,和boto3的请求参数做对比,可快速定位问题:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    

内容的提问来源于stack exchange,提问作者Ishan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:54:01