حذف واستعادة حاوية كائن ثنائي كبير الحجم باستخدام Python

توضح هذه المقالة كيفية حذف الحاويات باستخدام مكتبة عميل Azure Storage ل Python. إذا قمت بتمكين الحذف المبدئي للحاوية، يمكنك استعادة الحاويات المحذوفة.

للتعرف على حذف حاوية كائن ثنائي كبير الحجم باستخدام واجهات برمجة التطبيقات غير المتزامنة، راجع حذف حاوية بشكل غير متزامن.

المتطلبات الأساسية

  • تفترض هذه المقالة أن لديك بالفعل مشروعا تم إعداده للعمل مع مكتبة عميل Azure Blob Storage ل Python. للتعرف على إعداد مشروعك، بما في ذلك تثبيت الحزمة وإضافة import عبارات وإنشاء كائن عميل معتمد، راجع بدء استخدام Azure Blob Storage وPython.
  • يجب أن يكون لآلية التخويل أذونات لحذف حاوية كائن ثنائي كبير الحجم، أو لاستعادة حاوية محذوفة مبدئيا. لمعرفة المزيد، راجع إرشادات التخويل لعمليات واجهة برمجة تطبيقات REST التالية:

احذف حاوية

لحذف حاوية في Python، استخدم الأسلوب التالي من فئة BlobServiceClient :

يمكنك أيضا حذف حاوية باستخدام الأسلوب التالي من فئة ContainerClient :

بعد حذف حاوية، لا يمكنك إنشاء حاوية بنفس الاسم لمدة 30 ثانية على الأقل. ستفشل محاولة إنشاء حاوية بنفس الاسم مع رمز 409 (Conflict)خطأ HTTP . ستفشل أي عمليات أخرى على الحاوية أو الكائنات الثنائية كبيرة الحجم التي تحتوي عليها مع رمز 404 (Not Found)خطأ HTTP .

يستخدم المثال التالي كائن BlobServiceClient لحذف الحاوية المحددة:

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

يوضح المثال التالي كيفية حذف كافة الحاويات التي تبدأ ببادئة محددة:

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

استعادة حاوية محذوفة

عند تمكين الحذف المبدئي للحاوية لحساب تخزين، قد يتم استرداد حاوية محذوفة ومحتوياتها خلال فترة استبقاء محددة. لمعرفة المزيد حول الحذف المبدئي للحاوية، راجع تمكين الحذف المبدئي للحاويات وإدارته. يمكنك استعادة حاوية محذوفة مبدئيا عن طريق استدعاء الأسلوب التالي من BlobServiceClient الفئة :

يبحث المثال التالي عن حاوية محذوفة، ويحصل على إصدار تلك الحاوية المحذوفة، ثم يمرر الإصدار إلى undelete_container الأسلوب لاستعادة الحاوية.

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)

حذف حاوية بشكل غير متزامن

تدعم مكتبة عميل Azure Blob Storage ل Python حذف حاوية كائن ثنائي كبير الحجم بشكل غير متزامن. لمعرفة المزيد حول متطلبات إعداد المشروع، راجع البرمجة غير المتزامنة.

اتبع هذه الخطوات لحذف حاوية باستخدام واجهات برمجة التطبيقات غير المتزامنة:

  1. إضافة عبارات الاستيراد التالية:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. أضف التعليمات البرمجية لتشغيل البرنامج باستخدام asyncio.run. تقوم هذه الدالة بتشغيل coroutine الذي تم تمريره، main() في مثالنا، وتدير asyncio حلقة الحدث. يتم الإعلان عن Coroutines باستخدام بناء الجملة غير المتزامن/انتظار. في هذا المثال، main() يقوم coroutine أولا بإنشاء المستوى BlobServiceClient الأعلى باستخدام async with، ثم يستدعي الأسلوب الذي يحذف الحاوية. لاحظ أن عميل المستوى الأعلى فقط يحتاج إلى استخدام async with، حيث يشارك العملاء الآخرون الذين تم إنشاؤهم منه نفس تجمع الاتصال.

    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. إضافة تعليمة برمجية لحذف الحاوية. التعليمات البرمجية هي نفس المثال المتزامن، باستثناء أن الأسلوب يتم تعريفه باستخدام async الكلمة الأساسية ويتم await استخدام الكلمة الأساسية عند استدعاء delete_container الأسلوب .

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

مع هذا الإعداد الأساسي في مكانه، يمكنك تنفيذ أمثلة أخرى في هذه المقالة ك coroutines باستخدام بناء الجملة غير المتزامن/انتظار.

الموارد

لمعرفة المزيد حول حذف حاوية باستخدام مكتبة عميل Azure Blob Storage ل Python، راجع الموارد التالية.

عمليات واجهة برمجة تطبيقات REST

يحتوي Azure SDK ل Python على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج Python المألوفة. تستخدم أساليب مكتبة العميل لحذف حاوية أو استعادتها عمليات REST API التالية:

نماذج التعليمات البرمجية

موارد مكتبة العميل

(راجع أيضًا )