حذف كائن ثنائي كبير الحجم واستعادته باستخدام Python
توضح هذه المقالة كيفية حذف الكائنات الثنائية كبيرة الحجم باستخدام مكتبة عميل Azure Storage ل Python، وكيفية استعادة الكائنات الثنائية كبيرة الحجم المحذوفة مبدئيا أثناء فترة الاستبقاء.
للتعرف على حذف كائن ثنائي كبير الحجم باستخدام واجهات برمجة التطبيقات غير المتزامنة، راجع حذف كائن ثنائي كبير الحجم بشكل غير متزامن.
المتطلبات الأساسية
- اشتراك Azure - إنشاء اشتراك مجاني
- حساب تخزين Azure - إنشاء حساب تخزين
- Python 3.8+
إعداد بيئتك
إذا لم يكن لديك مشروع موجود، يوضح لك هذا القسم كيفية إعداد مشروع للعمل مع مكتبة عميل Azure Blob Storage ل Python. لمزيد من التفاصيل، راجع بدء استخدام Azure Blob Storage وPython.
لاستخدام أمثلة التعليمات البرمجية في هذه المقالة، اتبع هذه الخطوات لإعداد مشروعك.
تثبيت الحزم
قم بتثبيت الحزم التالية باستخدام pip install
:
pip install azure-storage-blob azure-identity
إضافة عبارات الاستيراد
أضف عبارات import
التالية:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
التصريح
يجب أن يكون لآلية التخويل الأذونات اللازمة لحذف كائن ثنائي كبير الحجم، أو لاستعادة كائن ثنائي كبير الحجم محذوف مبدئيا. للحصول على تخويل باستخدام معرف Microsoft Entra (مستحسن)، تحتاج إلى دور Azure RBAC المضمن في Storage Blob Data Contributor أو أعلى. لمعرفة المزيد، راجع إرشادات التخويل لحذف Blob (REST API) و Undelete Blob (REST API).
إنشاء كائن عميل
لتوصيل تطبيق ب Blob Storage، قم بإنشاء مثيل BlobServiceClient. يوضح المثال التالي كيفية إنشاء كائن عميل باستخدام DefaultAzureCredential
للتخويل:
# 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)
يمكنك أيضا إنشاء كائنات العميل لحاويات أو كائنات ثنائية كبيرة الحجم معينة، إما مباشرة أو من BlobServiceClient
العنصر. لمعرفة المزيد حول إنشاء كائنات العميل وإدارتها، راجع إنشاء كائنات العميل التي تتفاعل مع موارد البيانات وإدارتها.
حذف كائن ثنائي كبير الحجم
إشعار
عند تمكين الحذف المبدئي للكائن الثنائي كبير الحجم لحساب تخزين، لا يمكنك إجراء حذف دائم باستخدام أساليب مكتبة العميل. باستخدام الأساليب الواردة في هذه المقالة، يظل الكائن الثنائي كبير الحجم المحذوف مبدئيا أو إصدار الكائن الثنائي كبير الحجم أو اللقطة متوفرا حتى تنتهي فترة الاستبقاء، وفي ذلك الوقت يتم حذفه نهائيا. لمعرفة المزيد حول عملية REST API الأساسية، راجع حذف Blob (REST API).
لحذف كائن ثنائي كبير الحجم، قم باستدعاء الأسلوب التالي:
يحذف المثال التالي كائن ثنائي كبير الحجم:
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()
إذا كان للكائن الثنائي كبير الحجم أي لقطات مقترنة، يجب حذف جميع اللقطات الخاصة به لحذف الكائن الثنائي كبير الحجم. يحذف المثال التالي كائن ثنائي كبير الحجم ولقطاته:
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")
لحذف اللقطات فقط وليس الكائن الثنائي كبير الحجم نفسه، يمكنك تمرير المعلمة delete_snapshots="only"
.
استعادة كائن ثنائي محذوف
يعمل الحذف المبدئي للكائنات الثنائية كبيرة الحجم على حماية الكائن الفردي وإصداراته ولقطاته وبيانات تعريفه من الحذف العرضي أو عمليات الاستبدال، عن طريق الاحتفاظ بالبيانات المحذوفة في النظام لفترة زمنية محددة. خلال فترة الاستبقاء، يمكنك استعادة الكائن الثنائي كبير الحجم إلى حالته عند الحذف. وبعد انتهاء فترة الاستبقاء، يتم حذف الكائن الثنائي كبير الحجم بشكل دائم. لمزيد من المعلومات حول الحذف المبدئي للكائن الثنائي كبير الحجم، راجع الحذف المبدئي للكائنات الثنائية كبيرة الحجم.
يمكنك استخدام مكتبات عملاء Azure Storage لاستعادة كائن ثنائي كبير الحجم أو لقطة محذوفة.
تعتمد كيفية استعادة كائن ثنائي كبير الحجم محذوف مبدئيا على ما إذا كان حساب التخزين الخاص بك قد تم تمكين إصدار الكائن الثنائي كبير الحجم أم لا. لمزيد من المعلوماَت حول تعيين إصدار النقاط، راجع تعيين إصدار Blob. راجع أحد الأقسام التالية، استنادا إلى السيناريو الخاص بك:
استعادة الكائنات الثنائية كبيرة الحجم المحذوفة مبدئيًا عند تعطيل تعيين الإصدار
لاستعادة الكائنات الثنائية كبيرة الحجم المحذوفة عند تعطيل تعيين الإصدار، قم باستدعاء الأسلوب التالي:
يستعيد هذا الأسلوب المحتوى وبيانات التعريف للكائن الثنائي كبير الحجم المحذوف مبدئيا وأي لقطات محذوفة مبدئيا مقترنة. استدعاء هذا الأسلوب لكائن ثنائي كبير الحجم لم يتم حذفه ليس له أي تأثير.
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()
استعادة الكائنات المحذوفة مبدئيا عند تمكين تعيين الإصدار
إذا تم تكوين حساب تخزين لتمكين تعيين إصدار كائن ثنائي كبير الحجم، يؤدي حذف كائن ثنائي كبير الحجم إلى أن يصبح الإصدار الحالي من الكائن الثنائي كبير الحجم هو الإصدار السابق. لاستعادة كائن ثنائي كبير الحجم محذوف مبدئيًا عند تمكين تعيين الإصدار، انسخ إصدارًا سابقًا فوق الكائن الثنائي كبير الحجم الأساسي. يمكنك استخدام الأسلوب التالي:
يحصل مثال التعليمات البرمجية التالي على أحدث إصدار من كائن ثنائي كبير الحجم محذوف، ويستعيد أحدث إصدار عن طريق نسخه إلى الكائن الثنائي كبير الحجم الأساسي:
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)
حذف كائن ثنائي كبير الحجم بشكل غير متزامن
تدعم مكتبة عميل Azure Blob Storage ل Python حذف كائن ثنائي كبير الحجم بشكل غير متزامن. لمعرفة المزيد حول متطلبات إعداد المشروع، راجع البرمجة غير المتزامنة.
اتبع هذه الخطوات لحذف كائن ثنائي كبير الحجم باستخدام واجهات برمجة التطبيقات غير المتزامنة:
إضافة عبارات الاستيراد التالية:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient
أضف التعليمات البرمجية لتشغيل البرنامج باستخدام
asyncio.run
. تقوم هذه الدالة بتشغيل coroutine الذي تم تمريره،main()
في مثالنا، وتديرasyncio
حلقة الحدث. يتم الإعلان عن Coroutines باستخدام بناء الجملة غير المتزامن/انتظار. في هذا المثال،main()
يقوم coroutine أولا بإنشاء المستوىBlobServiceClient
الأعلى باستخدامasync with
، ثم يستدعي الأسلوب الذي يحذف الكائن الثنائي كبير الحجم. لاحظ أن عميل المستوى الأعلى فقط يحتاج إلى استخدامasync with
، حيث يشارك العملاء الآخرون الذين تم إنشاؤهم منه نفس تجمع الاتصال.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())
إضافة تعليمة برمجية لحذف الكائن الثنائي كبير الحجم. التعليمات البرمجية هي نفس المثال المتزامن، باستثناء أن الأسلوب يتم تعريفه باستخدام
async
الكلمة الأساسية ويتمawait
استخدام الكلمة الأساسية عند استدعاءdelete_blob
الأسلوب .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()
مع هذا الإعداد الأساسي في مكانه، يمكنك تنفيذ أمثلة أخرى في هذه المقالة ك coroutines باستخدام بناء الجملة غير المتزامن/انتظار.
الموارد
لمعرفة المزيد حول كيفية حذف الكائنات الثنائية كبيرة الحجم واستعادة الكائنات الثنائية كبيرة الحجم المحذوفة مبدئيا باستخدام مكتبة عميل Azure Blob Storage ل Python، راجع الموارد التالية.
نماذج التعليمات البرمجية
- عرض نماذج التعليمات البرمجية المتزامنة أو غير المتزامنة من هذه المقالة (GitHub)
عمليات واجهة برمجة تطبيقات REST
يحتوي Azure SDK ل Python على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج Python المألوفة. تستخدم أساليب مكتبة العميل لحذف الكائنات الثنائية كبيرة الحجم واستعادة الكائنات الثنائية كبيرة الحجم المحذوفة عمليات واجهة برمجة تطبيقات REST التالية:
- حذف كائن ثنائي كبير الحجم (واجهة برمجة تطبيقات REST)
- إلغاء حذف كائن ثنائي كبير الحجم (واجهة برمجة تطبيقات REST)
موارد مكتبة العميل
(راجع أيضًا )
المحتوى ذو الصلة
- هذه المقالة هي جزء من دليل مطور Blob Storage ل Python. لمعرفة المزيد، راجع القائمة الكاملة لمقالات دليل المطور في إنشاء تطبيق Python.