微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Azure 表存储中提取字节值

如何解决从 Azure 表存储中提取字节值

我正在编写一个 Python 脚本来查询 Azure 表存储中的数据。

我要提取的数据是二进制类型的(信息被序列化并存储)

当我使用 entity['BodyChunk01] 运行代码时,我得到的值是

'BodyChunk01': <azure.data.tables._entity.EntityProperty object at 0x0DDFFB10>

(列名是BodyChunk01)

当我使用 entity['BodyChunk01'].value 时,如 stackoverflow 上的另一个问题所述,它返回反序列化的 json 数据,但我想要存储的实际序列化值,如您所见在下面的屏幕截图中

Sample Byte Data

解决方法

我相信你想要完成的事情是不可能的。我查看了 SDK 代码 here,似乎 SDK 正在根据代码 here 强行进行转换。

def _decode_base64_to_bytes(data):
    if isinstance(data,six.text_type):
        data = data.encode("utf-8")
    return base64.b64decode(data)

您可能想在此处提出问题:https://github.com/Azure/azure-sdk-for-python/issues 并提请 SDK 团队注意。

二进制数据被转换为“Base64 编码字符串”,然后被保存。您需要做的是进行 Base64 解码以获取字节数组。

我不精通 Python,但你可以这样做:

import base64
decodedBytes = base64.b64decode(entity['BodyChunk01'].value)
decodedStr = str(decodedBytes,"utf-8")
,

如果您想要原始格式的实体,您可以包含一个不返回 OData 类型的标头,这将通过反序列化传递。整数、浮点数、布尔值被转换为它们各自的类型,但二进制实体属性将作为原始字符串返回。这是一个代码片段:

headers = {'Accept': 'application/json;odata=nometadata'}

received_entity = table_client.get_entity(
    row_key=entity['RowKey'],partition_key=entity['PartitionKey'],headers=headers
)

print(received_entity['BodyChunk01'])

免责声明:我在 Azure SDK for Python 团队工作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。