Share via


使用 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.windows.net/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.windows.net/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 asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    from azure.core.exceptions import ResourceExistsError
    
  2. 新增程式碼以使用 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.windows.net"
        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())
    
  3. 新增程式碼以建立容器。 該程式碼與同步範例相同,不同之處在於該方法是以 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 作業:

程式碼範例

用戶端程式庫資源