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

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

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

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

إعداد بيئتك

إذا لم يكن لديك مشروع موجود، يوضح لك هذا القسم كيفية إعداد مشروع للعمل مع مكتبة عميل 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, ContentSettings

التصريح

يجب أن يكون لآلية التخويل الأذونات اللازمة للعمل مع خصائص الحاوية أو بيانات التعريف. للحصول على تخويل باستخدام معرف Microsoft Entra (موصى به)، تحتاج إلى دور Azure RBAC المضمن في Storage Blob Data Reader أو أعلى لعمليات الحصول ، وStorage Blob Data Contributor أو أعلى لعمليات المجموعة . لمعرفة المزيد، راجع إرشادات التخويل لتعيين خصائص Blob (REST API) أو Get Blob Properties (REST API) أو Set Blob Metadata (REST API) أو Get Blob Metadata (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 العنصر. لمعرفة المزيد حول إنشاء كائنات العميل وإدارتها، راجع إنشاء كائنات العميل التي تتفاعل مع موارد البيانات وإدارتها.

نبذة عن الخصائص وبيانات التعريف

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

  • بيانات التعريف المحددة مسبقًا من المستخدم: تتكون بيانات التعريف المحددة مسبقًا من المستخدم من زوج واحد أو أكثر من أزواج قيمة الاسم التي تحددها لمورد تخزين Blob. يمكنك استخدام بيانات التعريف لتخزين قيم إضافية مع المورد. قيم بيانات التعريف هي لأغراضك فقط، ولا تؤثر على كيفية تصرف المورد.

    أزواج اسم/قيمة بيانات التعريف هي رؤوس HTTP صالحة ويجب أن تلتزم بجميع القيود التي تحكم رؤوس HTTP. لمزيد من المعلومات حول متطلبات تسمية بيانات التعريف، راجع أسماء بيانات التعريف.

إشعار

أيضاً توفر علامات فهرسة الكائنات الثنائية كبيرة الحجم القدرة على تخزين سمات المفاتيح/القيم المُعرّفة من قِبل المستخدم جنباً إلى جنب مع مورد مساحة تخزين Azure Blob. بينما تتشابه علامات فهرسة الكائنات الثنائية كبيرة الحجم مع بيانات التعريف، فهي تختلف في أنه تتم فهرستها تلقائياً وتصبح قابلة للبحث بواسطة الخدمة الأصلية للكائنات الثنائية كبيرة الحجم. لا يمكن فهرسة بيانات التعريف والاستعلام عنها إلا إذا كنت تستخدم خدمة منفصلة، مثل Azure Search.

للتعرّف على المزيد حول هذه الميزة، راجع إدارة البيانات والعثور عليها على مساحة تخزين Azure Blob باستخدام فهرس كائنات ثنائية كبيرة الحجم (معاينة).

تعيين الخصائص واستردادها

لتعيين خصائص على كائن ثنائي كبير الحجم، استخدم الأسلوب التالي:

يتم مسح أي خصائص لم يتم تعيينها صراحة. للاحتفاظ بأي خصائص موجودة، يمكنك أولا استرداد خصائص الكائن الثنائي كبير الحجم، ثم استخدامها لتعبئة العناوين التي لم يتم تحديثها.

يعين مثال التعليمات البرمجية content_type التالي خصائص النظام و content_language على كائن ثنائي كبير الحجم، مع الحفاظ على الخصائص الموجودة:

def set_properties(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Get the existing blob properties
    properties = blob_client.get_blob_properties()

    # Set the content_type and content_language headers, and populate the remaining headers from the existing properties
    blob_headers = ContentSettings(content_type="text/plain",
                                   content_encoding=properties.content_settings.content_encoding,
                                   content_language="en-US",
                                   content_disposition=properties.content_settings.content_disposition,
                                   cache_control=properties.content_settings.cache_control,
                                   content_md5=properties.content_settings.content_md5)
    
    blob_client.set_http_headers(blob_headers)

لاسترداد الخصائص على كائن ثنائي كبير الحجم، استخدم الأسلوب التالي:

يحصل مثال التعليمات البرمجية التالي على خصائص نظام كائن ثنائي كبير الحجم ويعرض بعض القيم:

def get_properties(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    properties = blob_client.get_blob_properties()

    print(f"Blob type: {properties.blob_type}")
    print(f"Blob size: {properties.size}")
    print(f"Content type: {properties.content_settings.content_type}")
    print(f"Content language: {properties.content_settings.content_language}")

تعيين بيانات التعريف واستردادها

يمكنك تحديد بيانات التعريف كزوج واحد أو أكثر من أزواج قيمة الاسم على مورد النقطة أو الحاوية. لتعيين بيانات التعريف، أرسل قاموسا يحتوي على أزواج قيمة الاسم باستخدام الأسلوب التالي:

يعين مثال التعليمات البرمجية التالي بيانات التعريف على كائن ثنائي كبير الحجم:

def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Retrieve existing metadata, if desired
    blob_metadata = blob_client.get_blob_properties().metadata

    more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'}
    blob_metadata.update(more_blob_metadata)

    # Set metadata on the blob
    blob_client.set_blob_metadata(metadata=blob_metadata)

لاسترداد بيانات التعريف، قم باستدعاء أسلوب get_blob_properties على الكائن الثنائي كبير الحجم لملء مجموعة بيانات التعريف، ثم اقرأ القيم، كما هو موضح في المثال أدناه. يسترد get_blob_properties الأسلوب خصائص الكائن الثنائي كبير الحجم وبيانات التعريف عن طريق استدعاء كل من عملية Get Blob Properties والعملية Get Blob Metadata .

يقرأ مثال التعليمات البرمجية التالي بيانات التعريف على كائن ثنائي كبير الحجم ويطبع كل زوج مفتاح/قيمة:

def get_metadata(self, blob_service_client: BlobServiceClient, container_name):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")

    # Retrieve existing metadata, if desired
    blob_metadata = blob_client.get_blob_properties().metadata

    for k, v in blob_metadata.items():
        print(k, v)

تعيين بيانات تعريف الكائن الثنائي كبير الحجم بشكل غير متزامن

تدعم مكتبة عميل 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 = 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.set_metadata(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. إضافة تعليمة برمجية لتعيين بيانات تعريف الكائن الثنائي كبير الحجم. التعليمات البرمجية هي نفس المثال المتزامن، باستثناء أن الأسلوب يتم تعريفه باستخدام async الكلمة الأساسية ويتم await استخدام الكلمة الأساسية عند استدعاء الأسلوبين get_blob_properties و set_blob_metadata .

    async def set_metadata(self, blob_service_client: BlobServiceClient, container_name):
        blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
    
        # Retrieve existing metadata, if desired
        properties = await blob_client.get_blob_properties()
        blob_metadata = properties.metadata
    
        more_blob_metadata = {'docType': 'text', 'docCategory': 'reference'}
        blob_metadata.update(more_blob_metadata)
    
        # Set metadata on the blob
        await blob_client.set_blob_metadata(metadata=blob_metadata)
    

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

الموارد

لمعرفة المزيد حول كيفية إدارة خصائص النظام وبيانات التعريف المعرفة من قبل المستخدم باستخدام مكتبة عميل Azure Blob Storage ل Python، راجع الموارد التالية.

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

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

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

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

  • هذه المقالة هي جزء من دليل مطور Blob Storage ل Python. لمعرفة المزيد، راجع القائمة الكاملة لمقالات دليل المطور في إنشاء تطبيق Python.