Skapa en blobcontainer med Python
Blobar i Azure Storage är ordnade i containrar. Innan du kan ladda upp en blob måste du först skapa en container. Den här artikeln visar hur du skapar containrar med Azure Storage-klientbiblioteket för Python.
Mer information om hur du skapar blobcontainrar med asynkrona API:er finns i Skapa en container asynkront.
Förutsättningar
- Azure-prenumeration – skapa en kostnadsfritt
- Azure Storage-konto – skapa ett lagringskonto
- Python 3.8+
Konfigurera din miljö
Om du inte har ett befintligt projekt visar det här avsnittet hur du konfigurerar ett projekt för att arbeta med Azure Blob Storage-klientbiblioteket för Python. Mer information finns i Kom igång med Azure Blob Storage och Python.
Följ de här stegen för att konfigurera projektet om du vill arbeta med kodexemplen i den här artikeln.
Installera paket
Installera följande paket med :pip install
pip install azure-storage-blob azure-identity
Lägga till importinstruktioner
Lägg till följande import
-uttryck:
from azure.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Auktorisering
Auktoriseringsmekanismen måste ha de behörigheter som krävs för att skapa en container. För auktorisering med Microsoft Entra-ID (rekommenderas) behöver du den inbyggda rollen Storage Blob Data Contributor eller senare. Mer information finns i auktoriseringsvägledningen för Skapa container (REST API).
Skapa ett klientobjekt
Om du vill ansluta en app till Blob Storage skapar du en instans av BlobServiceClient. I följande exempel visas hur du skapar ett klientobjekt med hjälp av DefaultAzureCredential
för auktorisering:
# 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)
Du kan också skapa klientobjekt för specifika containrar eller blobar, antingen direkt eller från objektet BlobServiceClient
. Mer information om hur du skapar och hanterar klientobjekt finns i Skapa och hantera klientobjekt som interagerar med dataresurser.
Om namngivning av containrar
Ett containernamn måste vara ett giltigt DNS-namn eftersom det utgör en del av den unika URI som används för att adressera containern eller dess blobar. Följ dessa regler när du namnger en container:
- Containernamn kan vara mellan 3 och 63 tecken långa.
- Containernamn måste börja med en bokstav eller siffra och får endast innehålla gemener, siffror och bindestreck (-).
- På varandra följande bindestreckstecken tillåts inte i containernamn.
URI:n för en containerresurs är formaterad på följande sätt:
https://my-account-name.blob.core.windows.net/my-container-name
Skapa en container
Om du vill skapa en container anropar du följande metod från klassen BlobServiceClient :
Du kan också skapa en container med hjälp av följande metod från klassen ContainerClient :
Containrar skapas omedelbart under lagringskontot. Det går inte att kapsla en container under en annan. Ett undantag utlöses om det redan finns en container med samma namn.
I följande exempel skapas en container från ett BlobServiceClient
objekt:
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')
Skapa rotcontainern
En rotcontainer fungerar som standardcontainer för ditt lagringskonto. Varje lagringskonto kan ha en rotcontainer som måste ha namnet $root. Rotcontainern måste skapas eller tas bort uttryckligen.
Du kan referera till en blob som lagras i rotcontainern utan att inkludera rotcontainerns namn. Med rotcontainern kan du referera till en blob på den översta nivån i lagringskontohierarkin. Du kan till exempel referera till en blob i rotcontainern enligt följande:
https://accountname.blob.core.windows.net/default.html
I följande exempel skapas ett nytt ContainerClient
objekt med containernamnet $root och skapar sedan containern om den inte redan finns i lagringskontot:
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()
Skapa en container asynkront
Azure Blob Storage-klientbiblioteket för Python har stöd för att skapa en blobcontainer asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.
Följ dessa steg för att skapa en container med asynkrona API:er:
Lägg till följande importinstruktioner:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient from azure.core.exceptions import ResourceExistsError
Lägg till kod för att köra programmet med .
asyncio.run
Den här funktionen kör den skickade coroutinenmain()
i vårt exempel och hanterar händelseloopenasyncio
. Coroutines deklareras med syntaxen async/await. I det här exempletmain()
skapar coroutine först den översta nivånBlobServiceClient
med ochasync with
anropar sedan metoden som skapar containern. Observera att endast klienten på den översta nivån behöver användaasync with
, eftersom andra klienter som skapats från den delar samma anslutningspool.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())
Lägg till kod för att skapa en container. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet
async
och nyckelordetawait
används när metoden anropascreate_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')
Med den här grundläggande konfigurationen på plats kan du implementera andra exempel i den här artikeln som coroutines med hjälp av async/await-syntax.
Resurser
Mer information om hur du skapar en container med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.
Kodexempel
REST API-åtgärder
Azure SDK för Python innehåller bibliotek som bygger på Azure REST API så att du kan interagera med REST API-åtgärder via välbekanta Python-paradigm. Klientbiblioteksmetoderna för att skapa en container använder följande REST API-åtgärd:
- Skapa container (REST API)
Klientbiblioteksresurser
Relaterat innehåll
- Den här artikeln är en del av utvecklarguiden för Blob Storage för Python. Mer information finns i den fullständiga listan över utvecklarguideartiklar i Skapa din Python-app.