Usuwanie i przywracanie obiektu blob przy użyciu języka Python
W tym artykule pokazano, jak usuwać obiekty blob przy użyciu biblioteki klienta usługi Azure Storage dla języka Python oraz jak przywracać obiekty blob usunięte nietrwale w okresie przechowywania.
Aby dowiedzieć się więcej o usuwaniu obiektu blob przy użyciu asynchronicznych interfejsów API, zobacz Usuwanie obiektu blob asynchronicznie.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Konto usługi Azure Storage — tworzenie konta magazynu
- Python 3.8+
Konfigurowanie środowiska
Jeśli nie masz istniejącego projektu, w tej sekcji pokazano, jak skonfigurować projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python.
Aby pracować z przykładami kodu w tym artykule, wykonaj następujące kroki, aby skonfigurować projekt.
Instalowanie pakietów
Zainstaluj następujące pakiety przy użyciu polecenia pip install
:
pip install azure-storage-blob azure-identity
Dodawanie instrukcji importu
Dodaj następujące instrukcje import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Autoryzacja
Mechanizm autoryzacji musi mieć uprawnienia niezbędne do usunięcia obiektu blob lub przywrócenia nietrwałego obiektu blob. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej kontroli dostępu opartej na rolach platformy Azure współautora danych obiektów blob usługi Storage lub nowszego. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dotyczące usuwania obiektów blob (interfejsu API REST) i cofania usuwania obiektu blob (interfejs API REST).
Tworzenie obiektu klienta
Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie klasy BlobServiceClient. W poniższym przykładzie pokazano, jak utworzyć obiekt klienta przy użyciu DefaultAzureCredential
autoryzacji:
# 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)
Można również tworzyć obiekty klienta dla określonych kontenerów lub obiektów blob bezpośrednio lub z BlobServiceClient
obiektu. Aby dowiedzieć się więcej na temat tworzenia obiektów klienta i zarządzania nimi, zobacz Tworzenie obiektów klienta korzystających z zasobów danych i zarządzanie nimi.
Usuwanie obiektu blob
Uwaga
Jeśli usuwanie nietrwałe obiektu blob jest włączone dla konta magazynu, nie można wykonać trwałego usuwania przy użyciu metod biblioteki klienta. Korzystając z metod w tym artykule, usunięty nietrwale obiekt blob, wersja obiektu blob lub migawka pozostaje dostępny do momentu wygaśnięcia okresu przechowywania, w którym momencie zostanie trwale usunięty. Aby dowiedzieć się więcej na temat podstawowej operacji interfejsu API REST, zobacz Usuwanie obiektu blob (interfejs API REST).
Aby usunąć obiekt blob, wywołaj następującą metodę:
Poniższy przykład usuwa obiekt blob:
def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.delete_blob()
Jeśli obiekt blob ma skojarzone migawki, musisz usunąć wszystkie jego migawki, aby usunąć obiekt blob. Poniższy przykład usuwa obiekt blob i jego migawki:
def delete_blob_snapshots(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.delete_blob(delete_snapshots="include")
Aby usunąć tylko migawki, a nie sam obiekt blob, możesz przekazać parametr delete_snapshots="only"
.
Przywracanie usuniętego obiektu blob
Usunięcie nietrwałe obiektu blob chroni pojedynczy obiekt blob i jego poprawki, migawki i metadane przed przypadkowym usunięciem lub zastąpieniem przez utrzymanie usuniętych danych w systemie przez określony okres czasu. Podczas okresu przechowywania możesz przywrócić nietrwale usunięty obiekt blob do jego stanu w momencie usunięcia. Po wygaśnięciu okresu przechowywania obiekt blob zostanie trwale usunięty. Aby uzyskać więcej informacji na temat usuwania nietrwałego obiektu blob, zobacz Usuwanie nietrwałe dla obiektów blob.
Biblioteki klienta usługi Azure Storage umożliwiają przywrócenie nietrwałego obiektu blob lub migawki.
Sposób przywracania nietrwałego obiektu blob zależy od tego, czy konto magazynu ma włączone przechowywanie wersji obiektów blob. Aby uzyskać więcej informacji na temat przechowywania wersji obiektów blob, zobacz Przechowywanie wersji obiektów blob. W zależności od scenariusza zapoznaj się z jedną z następujących sekcji:
Przywracanie obiektów usuniętych nietrwale, gdy przechowywanie wersji jest wyłączone
Aby przywrócić usunięte obiekty blob, gdy przechowywanie wersji jest wyłączone, wywołaj następującą metodę:
Ta metoda przywraca zawartość i metadane nietrwałego obiektu blob oraz wszystkie skojarzone migawki nietrwałe. Wywołanie tej metody dla obiektu blob, który nie został usunięty, nie ma wpływu.
def restore_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
blob_client.undelete_blob()
Przywracanie obiektów usuniętych nietrwale po włączeniu przechowywania wersji
Jeśli konto magazynu jest skonfigurowane do włączania przechowywania wersji obiektów blob, usunięcie obiektu blob powoduje, że bieżąca wersja obiektu blob stanie się poprzednią wersją. Aby przywrócić obiekt blob usunięty nietrwale podczas włączania przechowywania wersji, skopiuj poprzednią wersję do podstawowego obiektu blob. Można użyć następującej metody:
Poniższy przykład kodu pobiera najnowszą wersję usuniętego obiektu blob i przywraca najnowszą wersję, kopiując go do podstawowego obiektu blob:
def restore_blob_version(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
container_client = blob_service_client.get_container_client(container=container_name)
# Get a reference to the soft-deleted base blob and list all the blob versions
blob_client = container_client.get_blob_client(blob=blob_name)
blob_list = container_client.list_blobs(name_starts_with=blob_name, include=['deleted','versions'])
blob_versions = []
for blob in blob_list:
blob_versions.append(blob.version_id)
# Get the latest version of the soft-deleted blob
blob_versions.sort(reverse=True)
latest_version = blob_versions[0]
# Build the blob URI and add the version ID as a query string
versioned_blob_url = f"{blob_client.url}?versionId={latest_version}"
# Restore the latest version by copying it to the base blob
blob_client.start_copy_from_url(versioned_blob_url)
Asynchroniczne usuwanie obiektu blob
Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchroniczne usuwanie obiektu blob. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.
Wykonaj następujące kroki, aby usunąć obiekt 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 usuwa obiekt 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.delete_blob(blob_service_client, "sample-container", "sample-blob.txt") if __name__ == '__main__': asyncio.run(main())
Dodaj kod, aby usunąć obiekt blob. Kod jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana za
async
pomocą słowa kluczowego, aawait
słowo kluczowe jest używane podczas wywoływaniadelete_blob
metody.async def delete_blob(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str): blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name) await blob_client.delete_blob()
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 usuwania obiektów blob i przywracania obiektów blob usuniętych nietrwale przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Python, zobacz następujące zasoby.
Przykłady kodu
- Wyświetlanie synchronicznych lub asynchronicznych przykładów kodu z tego artykułu (GitHub)
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 usuwania obiektów blob i przywracania usuniętych obiektów blob używają następujących operacji interfejsu API REST:
- Usuwanie obiektu blob (interfejs API REST)
- Cofanie usunięcia obiektu blob (interfejs API REST)
Zasoby biblioteki klienta
Zobacz też
Powiązana zawartość
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Python. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów w temacie Tworzenie aplikacji w języku Python.