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