Aracılığıyla paylaş


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

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ı, kapsayıcıyı silmek veya 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 Kapsayıcı silme (REST API) ve Kapsayıcıyı Geri Yükleme (REST API) yetkilendirme kılavuzuna bakın.

İ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 belirli kapsayıcılar veya BlobServiceClient 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.

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 BlobServiceClienten üst düzeyi async with 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.

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

İ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.