我想从 Azure 继承迭代器 ItemPaged - ItemPaged[TableEntity] 获取一个流对象到 Stream (Python)。可能吗?

I want to get a stream object from Azure Inheritance Iterator ItemPaged - ItemPaged[TableEntity] to Stream (Python). Is it possible?

我想从 Azure 继承迭代器 ItemPaged - ItemPaged[TableEntity] 获取一个流对象到流 (Python)。可能吗?

#更新于 2021 年 8 月 11 日 我实现了将 Azure 表备份到 Azure Blob - Current process to backup Azure Tables。但我想改进这个过程,我正在考虑不同的选择。我尝试从 Azure Tables 获取流以使用 create_blob_from_stream

我假设您想从 HTTP 响应中流式传输字节,而不是使用您接收到的对象的迭代器。

SDK 中的每个 API 都支持关键字参数调用 raw_response_hook,使您可以访问 HTTP 响应对象,然后如果需要,可以使用流下载 API到。请注意,由于有效负载被视为表示对象,因此无论如何都会将其预加载到内存中,但您仍然可以使用流语法。

回调只是一个参数:

def response_callback(response):
    # Do something with the response
    requests_response = response.internal_response
    # Use "requests" API now
    for chunk in requests_response.iter_content():
        work_with_chunk(chunk)

请注意,这是非常高级的,您可能会遇到困难,并且这可能不完全符合您的要求。我们正在开发一种新的 SDK 模式来简化这样的复杂场景,但它还没有发布。您将能够使用 send_request 方法发送和接收原始请求,这使您可以对查询的所有方面进行绝对控制,例如解释您只想流式传输(不在内存中预加载)或禁用反序列化默认情况下。

如果您有其他问题或需要说明,请随时在 Python 存储库的 Azure SDK 上提出问题:https://github.com/Azure/azure-sdk-for-python/issues

使用新建议进行编辑: TableEntity 是一个类似 class 的字典,因此您可以将 json.dumps 作为字符串,或 json.dump 作为流同时使用 ItemPaged<TableEntity>。如果 JSON 转储引发异常,您可以在 azure.core.serialization.AzureJSONEncoder 中尝试我们的 JSON 编码器:https://github.com/Azure/azure-sdk-for-python/blob/1ffb583d57347257159638ae5f71fa85d14c2366/sdk/core/azure-core/tests/test_serialization.py#L83

(我在 MS 工作,负责 Python 团队的 Azure SDK。)

参考: