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赋值时也需要传入字符串类型的UUID值,不要直接传入UUID对象。id = UnicodeAttribute(hash_key=True, null=False, default_for_new=uuid.uuid4) - 检查版本兼容性
部分旧版本PynamoDB存在主键查询的已知Bug,可升级到最新稳定版后重试:pip install --upgrade pynamodb - 开启调试日志定位请求差异
开启调试日志查看PynamoDB实际发送到DynamoDB的请求参数,和boto3的请求参数做对比,可快速定位问题:import logging logging.basicConfig(level=logging.DEBUG)
内容的提问来源于stack exchange,提问作者Ishan
相关产品推荐
相关产品推荐

