使用 Python 创建 blob 容器

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

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

先决条件

  • 本文假设已经设置了项目来使用适用于 Python 的 Azure Blob 存储客户端库。 若要了解如何设置项目(包括安装包、添加 import 语句和创建授权客户端对象),请参阅开始使用 Azure Blob 存储和 Python
  • 授权机制必须具有创建 blob 容器的权限。 若要了解详细信息,请参阅以下 REST API 操作的授权指南:

关于容器命名

容器名称必须是有效的 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 操作:

代码示例

客户端库资源