Python ile blob silme ve geri yükleme

Bu makalede Python için Azure Depolama istemci kitaplığını kullanarak blobların nasıl silineceği ve bekletme süresi boyunca geçici olarak silinen blobların nasıl geri yükleneceği gösterilmektedir.

Zaman uyumsuz API'leri kullanarak blob silme hakkında bilgi edinmek için bkz . Blobu zaman uyumsuz olarak silme.

Önkoşullar

Ortamınızı ayarlama

Mevcut bir projeniz yoksa, bu bölümde Python için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere bir projenin nasıl ayarlanacağı gösterilir. Diğer ayrıntılar için bkz. Azure Blob Depolama ve Python'ı kullanmaya başlama.

Bu makaledeki kod örnekleriyle çalışmak için projenizi ayarlamak için bu adımları izleyin.

Paketleri yükleme

kullanarak pip installaşağıdaki paketleri yükleyin:

pip install azure-storage-blob azure-identity

İçeri aktarma deyimleri ekleme

Aşağıdaki import deyimlerini ekleyin:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

Yetkilendirme

Yetkilendirme mekanizması, bir blobu silmek veya geçici olarak silinen bir blobu geri yüklemek için gerekli izinlere sahip olmalıdır. Microsoft Entra Id ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Verileri Katkıda Bulunanı veya üzeri gerekir. Daha fazla bilgi edinmek için Bkz. Blob Silme (REST API) ve Geri Alma Blobu (REST API) yetkilendirme kılavuzu.

İstemci nesnesi oluşturma

Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun. Aşağıdaki örnekte yetkilendirme için kullanarak DefaultAzureCredential bir istemci nesnesinin nasıl oluşturulacağı gösterilmektedir:

# 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)

Ayrıca, doğrudan veya nesneden BlobServiceClient belirli kapsayıcılar veya bloblar için istemci nesneleri oluşturabilirsiniz. İstemci nesneleri oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Veri kaynaklarıyla etkileşim kuran istemci nesneleri oluşturma ve yönetme.

Blobu silme

Not

Depolama hesabı için blob geçici silme etkinleştirildiğinde, istemci kitaplığı yöntemlerini kullanarak kalıcı silme işlemi gerçekleştiremezsiniz. Bu makaledeki yöntemler kullanılarak, geçici olarak silinen blob, blob sürümü veya anlık görüntü saklama süresi dolana kadar kullanılabilir durumda kalır ve kalıcı olarak silinir. Temel alınan REST API işlemi hakkında daha fazla bilgi edinmek için bkz . Blobu Silme (REST API).

Blobu silmek için aşağıdaki yöntemi çağırın:

Aşağıdaki örnek bir blobu siler:

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()

Blobun ilişkili anlık görüntüleri varsa, blobu silmek için tüm anlık görüntülerini silmeniz gerekir. Aşağıdaki örnek bir blobu ve anlık görüntülerini siler:

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")

Blob'un kendisini değil yalnızca anlık görüntüleri silmek için parametresini delete_snapshots="only"geçirebilirsiniz.

Silinen blobu geri yükleme

Blob'u geçici silme, sistemdeki silinen verileri belirli bir süre boyunca koruyarak tek bir blob'u ve sürümlerini, anlık görüntülerini ve meta verilerini yanlışlıkla silmelere veya üzerine yazmalara karşı korur. Saklama süresi boyunca, blob’u silindiği andaki durumuna geri yükleyebilirsiniz. Saklama süresi dolduktan sonra blob kalıcı olarak silinir. Blob geçici silme hakkında daha fazla bilgi için bkz . Bloblar için geçici silme.

Geçici olarak silinen bir blobu veya anlık görüntüyü geri yüklemek için Azure Depolama istemci kitaplıklarını kullanabilirsiniz.

Geçici olarak silinen blobu geri yükleme yönteminiz, depolama hesabınızda blob sürümü oluşturma özelliğinin etkinleştirilip etkinleştirilmediğine bağlıdır. Blob sürümü oluşturma hakkında daha fazla bilgi için bkz . Blob sürümü oluşturma. Senaryonuza bağlı olarak aşağıdaki bölümlerden birine bakın:

Sürüm oluşturma devre dışı bırakıldığında geçici olarak silinen nesneleri geri yükleme

Sürüm oluşturma devre dışı bırakıldığında silinen blobları geri yüklemek için aşağıdaki yöntemi çağırın:

Bu yöntem, geçici olarak silinen blobun içeriğini ve meta verilerini ve ilişkili geçici olarak silinen anlık görüntüleri geri yükler. Silinmemiş bir blob için bu yöntemi çağırmanın hiçbir etkisi yoktur.

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()

Sürüm oluşturma etkinleştirildiğinde geçici olarak silinen nesneleri geri yükleme

Depolama hesabı blob sürümü oluşturmayı etkinleştirecek şekilde yapılandırılmışsa, blobun silinmesi blobun geçerli sürümünün önceki sürüm olmasına neden olur. Sürüm oluşturma etkinleştirildiğinde geçici olarak silinen bir blobu geri yüklemek için, temel blob üzerinden önceki bir sürümü kopyalayın. Aşağıdaki yöntemi kullanabilirsiniz:

Aşağıdaki kod örneği silinen blobun en son sürümünü alır ve temel bloba kopyalayarak en son sürümü geri yükler:

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)

Blobu zaman uyumsuz olarak silme

Python için Azure Blob Depolama istemci kitaplığı bir blobu zaman uyumsuz olarak silmeyi destekler. Proje kurulum gereksinimleri hakkında daha fazla bilgi edinmek için bkz . Zaman uyumsuz programlama.

Zaman uyumsuz API'leri kullanarak bir blobu silmek için şu adımları izleyin:

  1. Aşağıdaki içeri aktarma deyimlerini ekleyin:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. kullanarak asyncio.runprogramı çalıştırmak için kod ekleyin. Bu işlev, main() örneğimizde geçirilen eş yordamları çalıştırır ve olay döngüsünü yönetir asyncio . Eş yordamlar zaman uyumsuz/await söz dizimi ile bildirilir. Bu örnekte, main() eş yordam önce kullanarak async withen üst düzeyi BlobServiceClient oluşturur, ardından blobu silecek yöntemi çağırır. Yalnızca en üst düzey istemcinin kullanması async withgerektiğini unutmayın; bu istemciden oluşturulan diğer istemciler aynı bağlantı havuzunu paylaşır.

    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())
    
  3. Blobu silmek için kod ekleyin. Kod, zaman uyumlu örnekle aynıdır, ancak yöntemi anahtar sözcüğüyle async bildirilir ve await yöntemi çağrılırken delete_blob anahtar sözcüğü kullanılır.

    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()
    

Bu temel kurulumla, bu makaledeki diğer örnekleri zaman uyumsuz/await söz dizimini kullanarak eş yordam olarak uygulayabilirsiniz.

Kaynaklar

Python için Azure Blob Depolama istemci kitaplığını kullanarak blobları silme ve geçici olarak silinen blobları geri yükleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

Kod örnekleri

REST API işlemleri

Python için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Python paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Blobları silmek ve silinen blobları geri yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:

  • Blobu Silme (REST API)
  • Blobu Geri Alma (REST API)

İstemci kitaplığı kaynakları

Ayrıca bkz.

  • Bu makale, Python için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Python uygulamanızı oluşturma makalesinde geliştirici kılavuzu makalelerinin tam listesine bakın.