Hantera blobegenskaper och metadata med Python
Förutom de data som de innehåller stöder blobar systemegenskaper och användardefinierade metadata. Den här artikeln visar hur du hanterar systemegenskaper och användardefinierade metadata med hjälp av Azure Storage-klientbiblioteket för Python.
Mer information om hur du hanterar egenskaper och metadata med asynkrona API:er finns i Ange blobmetadata asynkront.
Förutsättningar
- Den här artikeln förutsätter att du redan har ett projekt konfigurerat för att fungera med Azure Blob Storage-klientbiblioteket för Python. Mer information om hur du konfigurerar projektet, inklusive paketinstallation, tillägg
import
av instruktioner och skapande av ett auktoriserat klientobjekt finns i Komma igång med Azure Blob Storage och Python. - Auktoriseringsmekanismen måste ha behörighet att arbeta med blobegenskaper eller metadata. Mer information finns i auktoriseringsvägledningen för följande REST API-åtgärder:
Om egenskaper och metadata
Systemegenskaper: Systemegenskaper finns på varje Blob Storage-resurs. Vissa av dem kan läsas eller ställas in, medan andra är skrivskyddade. Under täcket motsvarar vissa systemegenskaper vissa standard-HTTP-huvuden. Azure Storage-klientbiblioteket för Python underhåller dessa egenskaper åt dig.
Användardefinierade metadata: Användardefinierade metadata består av ett eller flera namn/värde-par som du anger för en Blob Storage-resurs. Du kan använda metadata för att lagra ytterligare värden med resursen. Metadatavärden är endast för dina egna syften och påverkar inte hur resursen beter sig.
Metadatanamn/värdepar är giltiga HTTP-huvuden och bör följa alla begränsningar som styr HTTP-huvuden. Mer information om namngivningskrav för metadata finns i Metadatanamn.
Kommentar
Blobindextaggar ger också möjlighet att lagra godtyckliga användardefinierade nyckel-/värdeattribut tillsammans med en Azure Blob Storage-resurs. Även om det liknar metadata indexeras endast blobindextaggar automatiskt och görs sökbara av den interna blobtjänsten. Metadata kan inte indexeras och frågas om du inte använder en separat tjänst, till exempel Azure Search.
Mer information om den här funktionen finns i Hantera och hitta data på Azure Blob Storage med blobindex (förhandsversion).
Ange och hämta egenskaper
Om du vill ange egenskaper för en blob använder du följande metod:
Alla egenskaper som inte uttryckligen anges rensas. Om du vill bevara befintliga egenskaper kan du först hämta blobegenskaperna och sedan använda dem för att fylla i rubrikerna som inte uppdateras.
I följande kodexempel anges systemegenskaperna content_type
och content_language
på en blob, samtidigt som befintliga egenskaper bevaras:
def set_properties(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Get the existing blob properties
properties = blob_client.get_blob_properties()
# Set the content_type and content_language headers, and populate the remaining headers from the existing properties
blob_headers = ContentSettings(content_type="text/plain",
content_encoding=properties.content_settings.content_encoding,
content_language="en-US",
content_disposition=properties.content_settings.content_disposition,
cache_control=properties.content_settings.cache_control,
content_md5=properties.content_settings.content_md5)
blob_client.set_http_headers(blob_headers)
Om du vill hämta egenskaper på en blob använder du följande metod:
I följande kodexempel hämtas en blobs systemegenskaper och några av värdena visas:
def get_properties(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
properties = blob_client.get_blob_properties()
print(f"Blob type: {properties.blob_type}")
print(f"Blob size: {properties.size}")
print(f"Content type: {properties.content_settings.content_type}")
print(f"Content language: {properties.content_settings.content_language}")
Ange och hämta metadata
Du kan ange metadata som ett eller flera namn/värde-par på en blob- eller containerresurs. Om du vill ange metadata skickar du en ordlista som innehåller namn/värde-par med hjälp av följande metod:
I följande kodexempel anges metadata på en blob:
def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Retrieve existing metadata, if desired
blob_metadata = blob_client.get_blob_properties().metadata
more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'}
blob_metadata.update(more_blob_metadata)
# Set metadata on the blob
blob_client.set_blob_metadata(metadata=blob_metadata)
Om du vill hämta metadata anropar du metoden get_blob_properties i bloben för att fylla i metadatasamlingen och läser sedan värdena, som du ser i exemplet nedan. Metoden get_blob_properties
hämtar blobegenskaper och metadata genom att anropa både åtgärden Hämta blobegenskaper och åtgärden Hämta blobmetadata .
I följande kodexempel läss metadata på en blob och varje nyckel/värde-par skrivs ut:
def get_metadata(self, blob_service_client: BlobServiceClient, container_name):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Retrieve existing metadata, if desired
blob_metadata = blob_client.get_blob_properties().metadata
for k, v in blob_metadata.items():
print(k, v)
Ange blobmetadata asynkront
Azure Blob Storage-klientbiblioteket för Python har stöd för att hantera blobegenskaper och metadata asynkront. Mer information om krav för projektkonfiguration finns i Asynkron programmering.
Följ dessa steg för att ange blobmetadata 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
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 coroutinen först den översta nivånBlobServiceClient
med ochasync with
anropar sedan metoden som anger blobmetadata. 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 = BlobSamples() # 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.set_metadata(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Lägg till kod för att ange blobmetadata. Koden är samma som det synkrona exemplet, förutom att metoden deklareras med nyckelordet
async
och nyckelordetawait
används när du anroparget_blob_properties
metoderna ochset_blob_metadata
.async def set_metadata(self, blob_service_client: BlobServiceClient, container_name): blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt") # Retrieve existing metadata, if desired properties = await blob_client.get_blob_properties() blob_metadata = properties.metadata more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'} blob_metadata.update(more_blob_metadata) # Set metadata on the blob await blob_client.set_blob_metadata(metadata=blob_metadata)
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 hanterar systemegenskaper och användardefinierade metadata med hjälp av Azure Blob Storage-klientbiblioteket för Python finns i följande resurser.
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 hantera systemegenskaper och användardefinierade metadata använder följande REST API-åtgärder:
- Ange blobegenskaper (REST API)
- Hämta blobegenskaper (REST API)
- Ange blobmetadata (REST API)
- Hämta blobmetadata (REST API)
Kodexempel
Klientbiblioteksresurser
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för