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 gösterilmektedir. Bloblar için geçici silmeyi etkinleştirdiyseniz, saklama süresi boyunca silinen blobları geri yükleyebilirsiniz.
Zaman uyumsuz API'leri kullanarak blob silme hakkında bilgi edinmek için bkz . Blobu 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. - Kodunuzda zaman uyumsuz API'leri kullanmak için Zaman uyumsuz programlama bölümündeki gereksinimlere bakın.
- Yetkilendirme mekanizmasının bir blobu silme veya geçici olarak silinmiş bir blobu 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:
Blobu silme
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:
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()
eş yordam önce kullanarakasync with
en üst düzeyiBlobServiceClient
oluşturur, ardından blobu 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 = 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())
Blobu 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_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 silinen blobları geri yükleme 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. Blobları silmek ve silinen blobları geri yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:
Kod örnekleri
- Bu makaledeki (GitHub) zaman uyumlu veya zaman uyumsuz kod örneklerini görüntüleyin
İstemci kitaplığı kaynakları
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin