Python ile blob kapsayıcısı silme ve geri yükleme

Bu makalede Python için Azure Depolama istemci kitaplığıyla kapsayıcıların nasıl silineceği gösterilmektedir. Kapsayıcı geçici silmeyi etkinleştirdiyseniz silinen kapsayıcıları geri yükleyebilirsiniz.

Zaman uyumsuz API'leri kullanarak blob kapsayıcısını silme hakkında bilgi edinmek için bkz . Kapsayıcıyı zaman uyumsuz olarak silme.

Önkoşullar

  • Bu makalede, Python için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, deyim ekleme import ve yetkili istemci nesnesi oluşturma dahil olmak üzere projenizi ayarlama hakkında bilgi edinmek için bkz. Azure Blob Depolama ve Python'ı kullanmaya başlama.
  • Yetkilendirme mekanizmasının blob kapsayıcısını silme veya geçici olarak silinen kapsayıcıyı geri yükleme izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemleri için yetkilendirme kılavuzuna bakın:

Kapsayıcı silme

Python'da bir kapsayıcıyı silmek için BlobServiceClient sınıfından aşağıdaki yöntemi kullanın:

ContainerClient sınıfından aşağıdaki yöntemi kullanarak da bir kapsayıcıyı silebilirsiniz:

Kapsayıcıyı sildikten sonra, en az 30 saniye boyunca aynı ada sahip bir kapsayıcı oluşturamazsınız. Aynı ada sahip bir kapsayıcı oluşturma girişimi HTTP hata koduyla 409 (Conflict)başarısız olur. Kapsayıcıdaki veya içerdiği bloblardaki diğer işlemler HTTP hata koduyla 404 (Not Found)başarısız olur.

Aşağıdaki örnek, belirtilen kapsayıcıyı silmek için bir BlobServiceClient nesnesi kullanır:

def delete_container(self, blob_service_client: BlobServiceClient, container_name):
    container_client = blob_service_client.get_container_client(container=container_name)
    container_client.delete_container()

Aşağıdaki örnekte, belirtilen ön ekle başlayan tüm kapsayıcıların nasıl silineceği gösterilmektedir:

def delete_container_prefix(self, blob_service_client: BlobServiceClient):
    container_list = list(blob_service_client.list_containers(name_starts_with="test-"))
    assert len(container_list) >= 1

    for container in container_list:
        # Find containers with the specified prefix and delete
        container_client = blob_service_client.get_container_client(container=container.name)
        container_client.delete_container()

Silinen kapsayıcıyı geri yükleme

Depolama hesabı için kapsayıcı geçici silme etkinleştirildiğinde, silinen bir kapsayıcı ve içindekiler belirtilen saklama süresi içinde kurtarılabilir. Kapsayıcı geçici silme hakkında daha fazla bilgi edinmek için bkz . Kapsayıcılar için geçici silmeyi etkinleştirme ve yönetme. Sınıfın aşağıdaki yöntemini çağırarak geçici olarak silinmiş bir kapsayıcıyı BlobServiceClient geri yükleyebilirsiniz:

Aşağıdaki örnek silinmiş bir kapsayıcı bulur, silinen kapsayıcının sürümünü alır ve ardından kapsayıcıyı undelete_container geri yüklemek için yönteminin sürümüne geçirir.

def restore_deleted_container(self, blob_service_client: BlobServiceClient, container_name):
    container_list = list(
        blob_service_client.list_containers(include_deleted=True))
    assert len(container_list) >= 1

    for container in container_list:
        # Find the deleted container and restore it
        if container.deleted and container.name == container_name:
            restored_container_client = blob_service_client.undelete_container(
                deleted_container_name=container.name, deleted_container_version=container.version)

Kapsayıcıyı zaman uyumsuz olarak silme

Python için Azure Blob Depolama istemci kitaplığı bir blob kapsayıcısını 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 kapsayıcıyı 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() coroutine önce kullanarak async withen üst düzeyi BlobServiceClient oluşturur, ardından kapsayıcıyı 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 = ContainerSamples()
    
        # 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_container(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Kapsayıcıyı 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_container anahtar sözcüğü kullanılır.

    async def delete_container(self, blob_service_client: BlobServiceClient, container_name):
        container_client = blob_service_client.get_container_client(container=container_name)
        await container_client.delete_container()
    

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 kapsayıcı silme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.

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. Kapsayıcıyı silmek veya geri yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:

Kod örnekleri

İstemci kitaplığı kaynakları

Ayrıca bkz.