首页 > 解决方案 > 我想从 Azure 继承迭代器 ItemPaged - ItemPaged[TableEntity] 到 Stream (Python) 获取流对象。是否可以?

问题描述

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

#Updated 11.08.2021 我实现了将 Azure 表备份到 Azure Blob -备份 Azure 表的当前进程。但我想改进这个过程,我正在考虑不同的选择。我尝试从 Azure Tables 获取流以使用 create_blob_from_stream

标签: pythonazureazure-sdk-python

解决方案


我假设您想从 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方法发送和接收原始请求,该方法使您可以完全控制查询的各个方面,例如解释您只想流式传输(内存中没有预加载)或默认禁用反序列化。

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

使用新建议进行编辑: TableEntity是一个类似于类的 dict,因此您可以json.dumpsjson.dump使用ItemPaged<TableEntity>. 如果 JSON 转储引发异常,您可以尝试我们的 JSON 编码器azure.core.serialization.AzureJSONEncoderhttps ://github.com/Azure/azure-sdk-for-python/blob/1ffb583d57347257159638ae5f71fa85d14c2366/sdk/core/azure-core/tests/test_serialization.py #L83

(我在 MS 的 Azure SDK for Python 团队工作。)

参考:


推荐阅读