Eliminare e ripristinare un BLOB con Python
Questo articolo illustra come eliminare BLOB usando la libreria client di Archiviazione di Azure per Pythone come ripristinare BLOB eliminati temporaneamente durante il periodo di conservazione.
Per informazioni sull'eliminazione di un BLOB tramite API asincrone, vedere Eliminare un BLOB in modo asincrono.
Prerequisiti
- Sottoscrizione di Azure: creare un account gratuito
- Account di archiviazione di Azure: creare un account di archiviazione
- Python 3.8+
Configurazione dell'ambiente
Se non si dispone di un progetto esistente, questa sezione illustra come configurare un progetto per l’uso con la libreria client di Archiviazione BLOB di Azure per Python. Per altre informazioni, vedere Introduzione ad Archiviazione BLOB di Azure e Python.
Per usare gli esempi di codice in questo articolo, seguire questa procedura per configurare il progetto.
Installare i pacchetti
Installare i pacchetti seguenti tramite pip install
:
pip install azure-storage-blob azure-identity
Aggiungere le istruzioni di importazione
Aggiungere le istruzioni import
seguenti:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Autorizzazione
Il meccanismo di autorizzazione deve disporre delle autorizzazioni necessarie per eliminare un BLOB o per ripristinare un BLOB eliminato temporaneamente. Per l'autorizzazione con Microsoft Entra ID (scelta consigliata), è necessario disporre del ruolo predefinito di Controllo degli accessi in base al ruolo di Azure Collaboratore ai dati del BLOB di archiviazione o ruolo superiore. Per altre informazioni, vedere le indicazioni sulle autorizzazioni per Delete Blob (API REST) e Undelete Blob (API REST).
Creare un oggetto client
Per connettere un'app ad Archiviazione BLOB, creare un'istanza di BlobServiceClient. Nell'esempio seguente viene illustrato come creare un oggetto client usando DefaultAzureCredential
per l'autorizzazione:
# 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)
È anche possibile creare oggetti client per contenitori o BLOB specifici, direttamente o dall'oggetto BlobServiceClient
. Per altre informazioni sulla creazione e la gestione di oggetti client, vedere Creare e gestire oggetti client che interagiscono con le risorse dati.
Eliminare un BLOB
Nota
Quando l’eliminazione temporanea del BLOB è abilitata per un account di archiviazione, non è possibile eseguire un’eliminazione permanente usando i metodi della libreria client. Usando i metodi descritti in questo articolo, un BLOB eliminato temporaneamente, una versione del BLOB o uno snapshot rimangono disponibili fino alla scadenza del periodo di conservazione, dopodiché vengono eliminati definitivamente. Per altre informazioni sull'operazione dell'API REST sottostante, vedere Eliminare BLOB (API REST).
Per eliminare un BLOB, chiamare il metodo seguente:
L'esempio seguente elimina un 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()
Se il BLOB ha snapshot associati, è necessario eliminare tutti gli snapshot per eliminare il BLOB. L'esempio seguente elimina un BLOB e i suoi snapshot:
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")
Per eliminare solo gli snapshot e non il BLOB stesso, è possibile passare il parametro delete_snapshots="only"
.
Ripristinare un BLOB eliminato
L'eliminazione temporanea dei BLOB protegge un singolo BLOB con le sue versioni, gli snapshot e i metadati da eliminazioni o sovrascritture accidentali, mantenendo i dati eliminati nel sistema per un periodo di tempo specificato. Durante il periodo di conservazione è possibile ripristinare il BLOB nello stato in cui era al momento dell'eliminazione. Dopo la scadenza del periodo di conservazione, il BLOB viene eliminato definitivamente. Per altre informazioni sull'eliminazione temporanea dei BLOB, vedere Eliminazione temporanea per i BLOB.
È possibile usare le librerie client di Archiviazione di Azure per ripristinare un BLOB o uno snapshot eliminato temporaneamente.
La modalità di ripristino di un BLOB eliminato temporaneamente dipende dal fatto che l'account di archiviazione disponga o meno del controllo delle versioni per i BLOB abilitato. Per altre informazioni sul controllo delle versioni dei BLOB, vedere Controllo delle versioni per i BLOB. Passare a una delle sezioni seguenti in base allo scenario:
- Il controllo delle versioni dei BLOB non è abilitato
- Il controllo delle versioni dei BLOB è abilitato
Ripristinare gli oggetti eliminati temporaneamente quando il controllo delle versioni è disabilitato
Per ripristinare i BLOB eliminati quando il controllo delle versioni è disabilitato, chiamare il metodo seguente:
Questo metodo ripristina il contenuto e i metadati di un BLOB eliminato temporaneamente e gli eventuali snapshot eliminati temporaneamente associati. Chiamare questo metodo per un BLOB che non è stato eliminato non ha alcun effetto.
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()
Ripristinare gli oggetti eliminati temporaneamente quando è abilitato il controllo delle versioni
Se un account di archiviazione è configurato per abilitare il controllo delle versioni dei BLOB, l'eliminazione di un BLOB fa sì che la versione corrente del BLOB diventi la versione precedente. Per ripristinare un BLOB eliminato temporaneamente quando è abilitato il controllo delle versioni, copiare una versione precedente sul BLOB di base. È possibile usare il metodo seguente:
L'esempio di codice seguente ottiene l'ultima versione di un BLOB eliminato e la ripristina copiandola nel BLOB di base:
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)
Eliminare un BLOB in modo asincrono
La libreria client di Archiviazione BLOB di Azure per Python supporta l'eliminazione asincrona di un BLOB. Per altre informazioni sui requisiti di configurazione del progetto, vedere Programmazione asincrona.
Seguire questa procedura per eliminare un BLOB usando le API asincrone:
Aggiungere le seguenti istruzioni Import:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
Aggiungere il codice per eseguire il programma utilizzando
asyncio.run
. Questa funzione esegue la coroutine passata,main()
nell'esempio, e gestisce il ciclo di eventiasyncio
. Le coroutine vengono dichiarate con la sintassi async/await. In questo esempio, la coroutinemain()
crea innanzitutto ilBlobServiceClient
di primo livello usandoasync with
, quindi chiama il metodo che elimina il BLOB. Si noti che solo il client di primo livello deve usareasync with
, poiché gli altri client creati da esso condividono lo stesso pool di connessioni.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())
Aggiungere il codice per eliminare il BLOB. Il codice è uguale a quello dell'esempio sincrono, ad eccezione del fatto che il metodo viene dichiarato con la parola chiave
async
e che quando si chiama il metododelete_blob
viene usata la parola chiaveawait
.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()
Con questa configurazione di base, è possibile implementare altri esempi in questo articolo come coroutine usando la sintassi async/await.
Risorse
Per altre informazioni su come eliminare BLOB e ripristinare i BLOB eliminati temporaneamente con la libreria client di Archiviazione BLOB di Azure per Python, vedere le risorse seguenti.
Esempi di codice
Operazioni dell'API REST
Azure SDK per Python contiene librerie basate sull'API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi Python noti. I metodi della libreria client per eliminare i BLOB e ripristinare i BLOB eliminati usano le operazioni API REST seguenti:
- Delete Blob (API REST)
- Undelete Blob (API REST)
Risorse della libreria client
- Documentazione di riferimento della libreria client
- Codice sorgente della libreria client
- Pacchetto (PyPi)
Vedi anche
Contenuto correlato
- Questo articolo fa parte della Guida per sviluppatori di Archiviazione BLOB per Python. Per altre informazioni, vedere l’elenco completo degli articoli della Guida per sviluppatori in Creare la propria app Python.