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

如何使用Python从AWS DynamoDB访问并打印二进制字符串类型数据

解决DynamoDB中二进制加密数据的Python访问问题

看起来你在处理DynamoDB里的二进制加密数据时遇到了小麻烦,我来帮你捋一捋。首先看你的代码和遇到的问题:你能成功从表中获取到item,但直接打印dec_otp只显示Tr...,还误以为没法赋值——其实这大概率是Python对二进制数据的默认显示逻辑,以及DynamoDB返回数据类型的特性导致的。

先给你拆解下问题和解决步骤:

1. 先搞清楚返回的otp是什么类型

你已经加了print(type(dec_otp)),先看这个输出:

  • 如果输出是<class 'bytes'>:这是DynamoDB存储二进制(B类型)数据时boto3默认返回的类型,赋值是完全正常的,你觉得无法赋值可能是没验证——比如可以试试print(len(a)),肯定能输出数据的字节长度,证明赋值成功了。而打印显示Tr...是Python的默认行为:当bytes对象太长时,会自动截断中间内容,只显示开头和结尾,不是“无法打印”。
  • 如果输出是<class 'botocore.response.StreamingBody'>:这说明存储的是大二进制对象,boto3返回了一个流对象,需要先读取才能拿到实际的字节数据。

2. 对应场景的解决方案

场景一:返回的是bytes类型

  • 要完整查看数据:直接打印bytes会截断,你可以转成base64编码的字符串,这样是可读的:
    import base64
    print(base64.b64encode(dec_otp).decode('utf-8'))
    
  • 解密操作:把这个bytes对象传入你之前加密时用的解密函数(比如AES解密),就能得到原始数据了。
  • 关于赋值:a = dec_otp是有效的,你可以通过print(len(a))或者print(base64.b64encode(a).decode('utf-8'))来验证。

场景二:返回的是StreamingBody类型

这种情况需要先读取流中的数据,再进行后续操作:

# 读取流中的字节数据
dec_otp_bytes = dec_otp.read()
# 现在可以正常赋值
a = dec_otp_bytes
# 打印可读的base64字符串
print(base64.b64encode(dec_otp_bytes).decode('utf-8'))
# 后续解密操作用dec_otp_bytes即可

另外,你可以试试打印item时看看otp字段的显示,DynamoDB的item输出里二进制数据也会用base64或者截断的方式展示,这都是正常的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:09