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:
Aşağıdaki içeri aktarma deyimlerini ekleyin:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
kullanarak
asyncio.run
programı ç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önetirasyncio
. Eş yordamlar zaman uyumsuz/await söz dizimi ile bildirilir. Bu örnekte,main()
coroutine önce kullanarakasync with
en üst düzeyiBlobServiceClient
oluşturur, ardından kapsayıcıyı silecek yöntemi çağırır. Yalnızca en üst düzey istemcinin kullanmasıasync with
gerektiğ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())
Kapsayıcıyı silmek için kod ekleyin. Kod, zaman uyumlu örnekle aynıdır, ancak yöntemi anahtar sözcüğüyle
async
bildirilir veawait
yöntemi çağrılırkendelete_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:
- Kapsayıcıyı Sil (REST API)
- Kapsayıcıyı Geri Yükleme (REST API)
Kod örnekleri
- Bu makaledeki (GitHub) zaman uyumlu veya zaman uyumsuz kod örneklerini görüntüleyin