首页 > 解决方案 > 将 jsons 列表作为 1 个文件上传到 azure blob

问题描述

从 blobs sdk 我看到upload_blobfunc 可以将数据获取为Iterable[AnyStr]or IO[AnyStr]

def upload_blob(  # pylint: disable=too-many-locals
        self, data,  # type: Union[Iterable[AnyStr], IO[AnyStr]]
        blob_type=BlobType.BlockBlob,  # type: Union[str, BlobType]
        length=None,  # type: Optional[int]
        metadata=None,  # type: Optional[Dict[str, str]]
        **kwargs
    ):

我正在尝试传递字符串的函数列表(我通过 json.dumps 转换为字符串的 jsons 但它失败了。

我的代码:

connect_str = xxxxx
container_name = "my-container"
blob_path="xx/yy/zz"
def upload_to_blob_storage(data):
   data_s = [json.dumps(event) for event in data ]
   blob_service_client = BlobServiceClient.from_connection_string(connection_str)
   blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_path)
   blob_client.upload_blob(data_s, overwrite=False)

堆栈跟踪:

File "/Users/myUser/PycharmProjects/test/blob_storage.py", line 31, in upload_to_blob_storage
    blob_client.upload_blob(data, overwrite=False)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/tracing/decorator.py", line 83, in wrapper_use_tracer
    return func(*args, **kwargs)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/storage/blob/_blob_client.py", line 693, in upload_blob
    return upload_block_blob(**options)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/storage/blob/_upload_helpers.py", line 94, in upload_block_blob
    return client.upload(
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/storage/blob/_generated/operations/_block_blob_operations.py", line 224, in upload
    pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 211, in run
    return first_node.send(pipeline_request)  # type: ignore
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request
  [Previous line repeated 2 more times]
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/policies/_redirect.py", line 158, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/storage/blob/_shared/policies.py", line 489, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  [Previous line repeated 1 more time]
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/storage/blob/_shared/policies.py", line 290, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 71, in send
    response = self.next.send(request)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/_base.py", line 103, in send
    self._sender.send(request.http_request, **request.context.options),
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/storage/blob/_shared/base_client.py", line 333, in send
    return self._transport.send(request, **kwargs)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/azure/core/pipeline/transport/_requests_basic.py", line 273, in send
    response = self.session.request(  # type: ignore
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/requests/sessions.py", line 528, in request
    prep = self.prepare_request(req)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/requests/sessions.py", line 456, in prepare_request
    p.prepare(
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/requests/models.py", line 319, in prepare
    self.prepare_body(data, files, json)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/requests/models.py", line 515, in prepare_body
    body = self._encode_params(data)
  File "/Users/myUser/PycharmProjects/test/venv/lib/python3.8/site-packages/requests/models.py", line 97, in _encode_params
    for k, vs in to_key_val_list(data):
ValueError: too many values to unpack (expected 2)

我在这里想念什么?

标签: pythonpython-3.xazureazure-blob-storage

解决方案


推荐阅读