分享方式:


使用 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.windows.net"
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.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 作業:

用戶端程式庫資源

後續步驟