Compartir a través de

使用 Python 创建 blob 容器

Azure 存储中的 Blob 已组织成容器。 必须先创建容器,才能上传 Blob。 本文介绍了如何使用适用于 Python 的 Azure 存储客户端库来创建容器。

要了解如何使用异步 API 创建 Blob 容器,请参阅异步创建容器

先决条件

设置你的环境

如果没有现有项目,请查看本部分,其中介绍如何设置项目来使用适用于 Python 的 Azure Blob 存储客户端库。 有关更多详细信息,请参阅 Azure Blob 存储和 Python 入门

要使用本文中的代码示例,请按照以下步骤设置项目。

安装包

使用 pip install 安装以下包:

pip install azure-storage-blob azure-identity

添加 import 语句

添加以下 import 语句:

from azure.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

授权

授权机制必须具有创建容器所需的权限。 若要使用 Microsoft Entra ID 进行授权(建议),需有 Azure RBAC 内置角色“存储 Blob 数据参与者”或更高级别的角色。 有关详细信息,请参阅创建容器 (REST API) 的授权指南。

创建客户端对象

若要将应用连接到 Blob 存储,请创建 BlobServiceClient 的实例。 以下示例演示如何使用 DefaultAzureCredential 创建客户端对象进行授权:

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.chinacloudapi.cn"
credential = DefaultAzureCredential()

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)

还可以为特定容器Blob 创建客户端对象,不管是直接创建还是通过 BlobServiceClient 对象创建。 要详细了解如何创建和管理客户端对象,请参阅 创建和管理与数据资源交互的客户端对象

关于容器命名

容器名称必须是有效的 DNS 名称,因为它是用于对容器或其 Blob 寻址的唯一 URI 的一部分。 为容器命名时,请遵循以下规则:

  • 容器名称的长度可以是 3 到 63 个字符。
  • 容器名称必须以字母或数字开头,并且只能包含小写字母、数字和短划线 (-) 字符。
  • 容器名称中不允许出现连续的短划线字符。

容器资源的 URI 的格式如下:

https://my-account-name.blob.core.chinacloudapi.cn/my-container-name

创建容器

若要创建容器,请调用 BlobServiceClient 类中的以下方法:

还可以使用 ContainerClient 类中的以下方法来创建容器:

将立即在存储帐户下创建容器。 无法将一个容器嵌套在另一个容器下。 如果已存在同名的容器,将引发异常。

以下示例通过 BlobServiceClient 对象创建容器:

def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
    try:
        container_client = blob_service_client.create_container(name=container_name)
    except ResourceExistsError:
        print('A container with this name already exists')

创建根容器

根容器充当存储帐户的默认容器。 每个存储帐户只能包含一个根容器,该容器必须命名为 $root。 必须显式创建或删除根容器。

可以引用存储在根容器中的 Blob,而无需包含根容器名称。 根容器允许引用位于存储帐户层次结构顶层的 Blob。 例如,可通过以下方式引用根容器中的 blob:

https://accountname.blob.core.chinacloudapi.cn/default.html

以下示例以容器名称 $root 创建新 ContainerClient 对象,然后创建容器(如果存储帐户中尚不存在该容器):

def create_blob_root_container(self, blob_service_client: BlobServiceClient):
    container_client = blob_service_client.get_container_client(container="$root")

    # Create the root container if it doesn't already exist
    if not container_client.exists():
        container_client.create_container()

异步创建容器

适用于 Python 的 Azure Blob 存储客户端库支持异步创建 blob 容器。 要详细了解项目设置要求,请参阅异步编程

按照以下步骤使用异步 API 创建容器:

  1. 添加以下 import 语句:
import asyncio

from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient
from azure.core.exceptions import ResourceExistsError
  1. 添加代码以使用asyncio.run运行程序。 此函数运行传递的协同例程(我们示例中的main()),并管理asyncio事件循环。 使用 async/await 语法声明协同例程。 在此示例中,main() 协同例程先使用 async with 创建顶级 BlobServiceClient,然后调用创建容器的方法。 请注意,只有顶级客户端需要使用async with,因为基于它创建的其他客户端会共享同一连接池。
async def main():
    sample = ContainerSamples()

    # TODO: Replace <storage-account-name> with your actual storage account name
    account_url = "https://<storage-account-name>.blob.core.chinacloudapi.cn"
    credential = DefaultAzureCredential()

    async with BlobServiceClient(account_url, credential=credential) as blob_service_client:
        await sample.create_blob_container(blob_service_client, "sample-container")

if __name__ == '__main__':
    asyncio.run(main())
  1. 添加代码以创建容器。 该代码与同步示例相同,除了该方法使用async关键字声明,await关键字在调用create_container方法时使用。
async def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
    try:
        container_client = await blob_service_client.create_container(name=container_name)
    except ResourceExistsError:
        print('A container with this name already exists')

有了此基本设置,即可使用 async/await 语法将本文中的其他示例实现为协同例程。

资源

若要详细了解如何使用适用于 Python 的 Azure Blob 存储客户端库创建容器,请参阅以下资源。

代码示例

REST API 操作

Azure SDK for Python 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 Python 范例与 REST API 操作进行交互。 用于创建容器的客户端库方法使用以下 REST API 操作:

客户端库资源

  • 本文是 Python 版 Blob 存储开发人员指南的一部分。 若要了解详细信息,请参阅生成 Python 应用中的开发人员指南文章的完整列表。