使用 azure-storage-blob 或 azure-storage 上传和删除 Azure 存储 Blob

jar*_*yeo 7 azure-storage azure-storage-blobs python-3.x

我参考了 Microsoft 的适用于 Python 的 Azure Blob 存储客户端库 v12的快速入门指南。它详细说明了如何上传 blob,但我想删除 blob。这个答案建议使用:

from azure.storage.blob import BlobService

blob_service = BlobService(account_name=accountName, account_key=accountKey)
blob_service.delete_blob(container_name, blob_name)
Run Code Online (Sandbox Code Playgroud)

但是,我尝试过,但出现以下错误:

ImportError: cannot import name 'BlobService' from 'azure.storage.blob'
Run Code Online (Sandbox Code Playgroud)

另一个答案建议使用from azure.storage.blob import BlockBlobService,但我也得到了与ImportError上面相同的结果。

我搜索了 Stackoverflow 以解决上述错误,并遇到了这个答案,它建议使用旧版本的库 ( azure-storage) 和另一个建议安装整个azure库的答案,但我想改用最新的库。

如何使用最新的azure-storage-blob库上传文件并删除 blob ?或者,如果我是 2019 年的新用户,并且正在遵循上述快速入门指南,但我想使用azure-storage这里的许多答案推荐的旧库,我该怎么做?

jar*_*yeo 27

2019 年以后更新的答案

有两种上传和删除 blob 的方法,第一种使用新azure-storage-blob库 (2019),第二种使用旧azure-storage库 (2019 之前)。

如果您是 2019 年以后的新用户,请按照更新的快速入门指南使用方法 1 。


方法一、使用新azure-storage-blob库(2019)

azure-storage如果已经安装,请先卸载旧库,然后安装新azure-storage-blob库。使用pip3的Python 3或pipPython的2:

pip3 uninstall azure-storage
pip3 install azure-storage-blob
Run Code Online (Sandbox Code Playgroud)

根据您的 Python 版本,pip freeze或者pip3 freeze应该显示以下内容:

azure-common==1.1.23
azure-core==1.0.0
azure-nspkg==3.0.2
azure-storage-blob==12.0.0
Run Code Online (Sandbox Code Playgroud)

如果要使用同一客户端上传文件和删除 blob,请使用ContainerClient. 文档可以在这里找到。

使用上传文件的代码ContainerClient

pip3 uninstall azure-storage
pip3 install azure-storage-blob
Run Code Online (Sandbox Code Playgroud)

使用以下方法删除 blob 的代码ContainerClient

azure-common==1.1.23
azure-core==1.0.0
azure-nspkg==3.0.2
azure-storage-blob==12.0.0
Run Code Online (Sandbox Code Playgroud)

或者,您可以BlobServiceClient根据快速入门指南使用上传文件。

使用上传文件的代码BlobServiceClient

from azure.storage.blob import ContainerClient

CONNECT_STR = ""
CONTAINER_NAME = ""
input_file_path = "/path/to/your/input_file.csv"
output_blob_name = "output_blob.csv"

container_client = ContainerClient.from_connection_string(conn_str=CONNECT_STR, container_name=CONTAINER_NAME)

# Upload file
with open(input_file_path, "rb") as data:
    container_client.upload_blob(name=output_blob_name, data=data)

Run Code Online (Sandbox Code Playgroud)

方法 2. 使用旧azure-storage库(2019 年之前)

azure-storage-blob如果已经安装,请先卸载新库,然后安装旧azure-storage库。使用pip3的Python 3或pipPython的2:

pip3 uninstall azure-storage-blob
pip3 install azure-storage
Run Code Online (Sandbox Code Playgroud)

根据您的 Python 版本,pip freeze或者pip3 freeze应该显示以下内容:

azure-common==1.1.23
azure-core==1.0.0
azure-nspkg==3.0.2
azure-storage==0.36.0
Run Code Online (Sandbox Code Playgroud)

我们可以使用BlockBlobService客户端上传文件和删除 blob。

使用上传文件的代码BlockBlobService

from azure.storage.blob import ContainerClient

CONNECT_STR = ""
CONTAINER_NAME = ""
blob_name = "output_blob.csv"

container_client = ContainerClient.from_connection_string(conn_str=CONNECT_STR, container_name=CONTAINER_NAME)

# Delete blob
container_client.delete_blob(blob=blob_name)
Run Code Online (Sandbox Code Playgroud)

使用以下方法删除 blob 的代码BlockBlobService

from azure.storage.blob import BlobServiceClient

CONNECT_STR = ""
CONTAINER_NAME = ""
input_file_path = "/path/to/your/input_file.csv"
output_blob_name = "output_blob.csv"

blob_service_client = BlobServiceClient.from_connection_string(CONNECT_STR)
blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=output_blob_name)

# Upload file
with open(input_file_path, "rb") as data:
    blob_client.upload_blob(data=data)
Run Code Online (Sandbox Code Playgroud)

背景

正如在这个答案中提到的,azure-storage自 0.37.0 以来,库引入了重大更改。根据更改日志,不仅命名空间被更改,而且库也被拆分为 5 个不同的包:

  1. azure-storage-common
  2. azure-storage-blob
  3. 天蓝色存储文件
  4. 天蓝色存储队列
  5. azure-storage-nspkg

尽管其他帖子上已经有很多答案,但我想指出,对于在 2019 年以后尝试此方法的新用户来说,尝试为库找到正确的代码很复杂,因为 Stackoverflow 上提供的许多答案(如果不是大多数)仍然是参考旧库azure-storage,但新用户遵循 Microsoft 于 2019 年 5 月更新的新教程,该教程使用新库azure-storage-blob。寻求帮助的新用户会在使用旧azure-storage库时无意中发现旧答案,但这些答案对他们不起作用。