Zarządzanie właściwościami i metadanymi obiektów blob przy użyciu języka Python
Oprócz danych, które zawierają, obiekty blob obsługują właściwości systemu i metadane zdefiniowane przez użytkownika. W tym artykule pokazano, jak zarządzać właściwościami systemu i metadanymi zdefiniowanymi przez użytkownika przy użyciu biblioteki klienta usługi Azure Storage dla języka Python.
Aby dowiedzieć się więcej na temat zarządzania właściwościami i metadanymi przy użyciu asynchronicznych interfejsów API, zobacz Asynchroniczne ustawianie metadanych obiektu blob.
Wymagania wstępne
- W tym artykule założono, że masz już skonfigurowany projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby dowiedzieć się więcej na temat konfigurowania projektu, w tym instalacji pakietu, dodawania
import
instrukcji i tworzenia autoryzowanego obiektu klienta, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python. - Mechanizm autoryzacji musi mieć uprawnienia do pracy z właściwościami obiektów blob lub metadanymi. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla następujących operacji interfejsu API REST:
Informacje o właściwościach i metadanych
Właściwości systemu: właściwości systemu istnieją w każdym zasobie usługi Blob Storage. Niektóre z nich mogą być odczytywane lub ustawiane, a inne są tylko do odczytu. Pod osłonami niektóre właściwości systemowe odpowiadają pewnym standardowym nagłówkom HTTP. Biblioteka klienta usługi Azure Storage dla języka Python obsługuje te właściwości.
Metadane zdefiniowane przez użytkownika: metadane zdefiniowane przez użytkownika składają się z co najmniej jednej pary nazwa-wartość określonej dla zasobu usługi Blob Storage. Za pomocą metadanych można przechowywać dodatkowe wartości z zasobem. Wartości metadanych są przeznaczone tylko do własnych celów i nie mają wpływu na zachowanie zasobu.
Pary nazwa/wartość metadanych są prawidłowymi nagłówkami HTTP i powinny być zgodne ze wszystkimi ograniczeniami dotyczącymi nagłówków HTTP. Aby uzyskać więcej informacji na temat wymagań dotyczących nazewnictwa metadanych, zobacz Nazwy metadanych.
Uwaga
Tagi indeksu obiektów blob zapewniają również możliwość przechowywania dowolnych atrybutów klucza/wartości zdefiniowanych przez użytkownika wraz z zasobem usługi Azure Blob Storage. Podobnie jak w przypadku metadanych, tylko tagi indeksu obiektów blob są automatycznie indeksowane i możliwe do przeszukiwania przez natywną usługę obiektów blob. Metadanych nie można indeksować i wykonywać zapytań, chyba że korzystasz z oddzielnej usługi, takiej jak Azure Search.
Aby dowiedzieć się więcej na temat tej funkcji, zobacz Zarządzanie danymi i znajdowanie ich w usłudze Azure Blob Storage za pomocą indeksu obiektów blob (wersja zapoznawcza).
Ustawianie i pobieranie właściwości
Aby ustawić właściwości obiektu blob, użyj następującej metody:
Wszystkie właściwości, które nie zostały jawnie ustawione, są czyszczone. Aby zachować wszystkie istniejące właściwości, możesz najpierw pobrać właściwości obiektu blob, a następnie użyć ich do wypełnienia nagłówków, które nie są aktualizowane.
Poniższy przykład kodu ustawia content_type
właściwości systemu i content_language
dla obiektu blob, zachowując istniejące właściwości:
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)
Aby pobrać właściwości obiektu blob, użyj następującej metody:
Poniższy przykład kodu pobiera właściwości systemu obiektu blob i wyświetla niektóre wartości:
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}")
Ustawianie i pobieranie metadanych
Metadane można określić jako jedną lub więcej par nazwa-wartość w zasobie obiektu blob lub kontenera. Aby ustawić metadane, wyślij słownik zawierający pary name-value przy użyciu następującej metody:
Poniższy przykład kodu ustawia metadane obiektu 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)
Aby pobrać metadane, wywołaj metodę get_blob_properties w obiekcie blob, aby wypełnić kolekcję metadanych, a następnie odczytaj wartości, jak pokazano w poniższym przykładzie. Metoda get_blob_properties
pobiera właściwości obiektu blob i metadane, wywołując zarówno operację Pobierz właściwości obiektu blob, jak i operację Pobierz metadane obiektu blob.
Poniższy przykład kodu odczytuje metadane obiektu blob i drukuje każdą parę klucz/wartość:
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)
Asynchroniczne ustawianie metadanych obiektu blob
Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchronicznie zarządzanie właściwościami obiektów blob i metadanymi. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.
Wykonaj następujące kroki, aby ustawić metadane obiektu blob przy użyciu asynchronicznych interfejsów API:
Dodaj następujące instrukcje importowania:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Dodaj kod, aby uruchomić program przy użyciu polecenia
asyncio.run
. Ta funkcja uruchamia przekazaną kohroutynę wmain()
naszym przykładzie i zarządza pętląasyncio
zdarzeń. Coroutines są deklarowane za pomocą składni async/await. W tym przykładziemain()
coroutine najpierw tworzy najwyższy poziomBlobServiceClient
przy użyciu metodyasync with
, a następnie wywołuje metodę, która ustawia metadane obiektu blob. Należy pamiętać, że tylko klient najwyższego poziomu musi używać programuasync with
, ponieważ inni klienci utworzoni na jego podstawie współużytkować tę samą pulę połączeń.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())
Dodaj kod, aby ustawić metadane obiektu blob. Kod jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana za pomocą słowa kluczowego
async
, aawait
słowo kluczowe jest używane podczas wywoływaniaget_blob_properties
metod iset_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)
Ta podstawowa konfiguracja umożliwia zaimplementowanie innych przykładów w tym artykule jako kohroutines przy użyciu składni async/await.
Zasoby
Aby dowiedzieć się więcej na temat zarządzania właściwościami systemu i metadanymi zdefiniowanymi przez użytkownika przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Python, zobacz następujące zasoby.
Operacje interfejsu API REST
Zestaw Azure SDK dla języka Python zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, umożliwiając interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Python. Metody biblioteki klienta do zarządzania właściwościami systemu i metadanymi zdefiniowanymi przez użytkownika używają następujących operacji interfejsu API REST:
- Ustawianie właściwości obiektu blob (interfejs API REST)
- Pobieranie właściwości obiektu blob (interfejs API REST)
- Ustawianie metadanych obiektu blob (interfejs API REST)
- Pobieranie metadanych obiektu blob (interfejs API REST)
Przykłady kodu
- Wyświetlanie synchronicznych lub asynchronicznych przykładów kodu z tego artykułu (GitHub)