Megosztás a következőn keresztül:


Blobtulajdonságok és metaadatok kezelése a Pythonnal

A blobok az általuk tárolt adatokon kívül támogatják a rendszer tulajdonságait és a felhasználó által definiált metaadatokat. Ez a cikk bemutatja, hogyan kezelheti a rendszertulajdonságokat és a felhasználó által definiált metaadatokat a Pythonhoz készült Azure Storage-ügyfélkódtár használatával.

A tulajdonságok és metaadatok aszinkron API-k használatával történő kezelésével kapcsolatos további információkért lásd : Blob-metaadatok aszinkron beállítása.

Előfeltételek

Saját környezet beállítása

Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a PythonHoz készült Azure Blob Storage ügyfélkódtár használatához. További részletekért tekintse meg az Azure Blob Storage és a Python használatának első lépéseit.

A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.

Csomagok telepítése

Telepítse a következő csomagokat a pip install használatával:

pip install azure-storage-blob azure-identity

Importálási utasítások hozzáadása

Adja hozzá a következő import-utasításokat:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContentSettings

Engedélyezés

Az engedélyezési mechanizmusnak rendelkeznie kell a tárolótulajdonságok vagy metaadatok használatához szükséges engedélyekkel. A Microsoft Entra-azonosítóval való engedélyezéshez (ajánlott) az Azure RBAC beépített szerepkörű Storage Blob Data Reader vagy annál magasabb szükséges a lekérési műveletekhez, és Storage Blob Data Contributor vagy annál magasabb a beállítási műveletekhez. További információért tekintse meg a Blob tulajdonságainak beállítása (REST API), a Blob tulajdonságainak lekérése (REST API), a Blob-metaadatok beállítása (REST API) vagy a Blob-metaadatok lekérése (REST API) engedélyezési útmutatóját.

Ügyfélobjektum létrehozása

Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt. Az alábbi példa bemutatja, hogyan hozhat létre ügyfélobjektumot DefaultAzureCredential engedélyezés céljából:

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

Ügyfélobjektumokat is létrehozhat adott tárolókhoz vagy blobokhoz közvetlenül vagy az BlobServiceClient objektumból. Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.

Tudnivalók a tulajdonságokról és a metaadatokról

  • Rendszertulajdonságok: A rendszertulajdonságok minden Blob Storage-erőforráson léteznek. Egy részük olvasható vagy beállítható, míg mások csak olvashatók. A borítók alatt egyes rendszertulajdonságok megfelelnek bizonyos szabványos HTTP-fejléceknek. A Pythonhoz készült Azure Storage ügyfélkönyvtár fenntartja ezeket a tulajdonságokat neked.

  • Felhasználó által definiált metaadatok: A felhasználó által definiált metaadatok egy vagy több, Blob Storage-erőforráshoz megadott név-érték párból állnak. Metaadatok használatával további értékeket tárolhat az erőforrással. A metaadat-értékek csak saját célra szolgálnak, és nem befolyásolják az erőforrás viselkedését.

    A metaadat-név/érték párok érvényes HTTP-fejlécek, és be kell tartaniuk a HTTP-fejlécekre vonatkozó összes korlátozást. A metaadatok elnevezési követelményeiről további információt a Metaadatnevek című témakörben talál.

Feljegyzés

A blobindex-címkék emellett lehetővé teszik a felhasználó által meghatározott kulcs-/értékattribútumok tárolását egy Azure Blob Storage-erőforrás mellett. Bár a metaadatokhoz hasonlóan csak a blob index címkék lesznek automatikusan indexelve, és a natív blobszolgáltatás teszi kereshetővé. A metaadatok csak akkor indexelhetők és kérdezhetők le, ha nem használ külön szolgáltatást, például az Azure Search szolgáltatást.

A funkcióról további információt az Azure Blob Storage-adatok kezelése és keresése blobindexszel (előzetes verzió) című témakörben talál.

Tulajdonságok beállítása és lekérése

A blob tulajdonságainak beállításához használja a következő módszert:

A nem explicit módon beállított tulajdonságok törlődnek. A meglévő tulajdonságok megőrzéséhez először lekérheti a blobtulajdonságokat, majd azokkal feltöltheti a nem frissített fejléceket.

Az alábbi példakód egy blobon állítja be a content_type rendszer- és content_language a rendszertulajdonságokat, miközben megőrzi a meglévő tulajdonságokat:

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)

Egy blob tulajdonságainak lekéréséhez használja a következő módszert:

Az alábbi példakód lekéri egy blob rendszertulajdonságait, és megjeleníti az értékek egy részét:

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}")

Metaadatok beállítása és lekérése

A metaadatokat egy vagy több név-érték párként is megadhatja egy blob- vagy tárolóerőforráson. A metaadatok beállításához küldjön egy név-érték párokat tartalmazó szótárt a következő módszerrel:

Az alábbi példakód egy blob metaadatait állítja be:

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)

A metaadatok lekéréséhez hívja meg a blob get_blob_properties metódusát a metaadat-gyűjtemény feltöltéséhez, majd olvassa el az értékeket az alábbi példában látható módon. A get_blob_properties metódus a blobtulajdonságokat és a metaadatokat a Blob tulajdonságainak lekérése művelet és a Blob metaadatok lekérése művelet meghívásával kéri le.

Az alábbi kódpéldában metaadatok olvashatók egy blobon, és kinyomtatja az egyes kulcs-érték párokat:

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)

Blob-metaadatok aszinkron beállítása

A Pythonhoz készült Azure Blob Storage ügyfélkódtár támogatja a blobtulajdonságok és metaadatok aszinkron kezelését. A projektbeállítási követelményekről további információt az Aszinkron programozás című témakörben talál.

A blob metaadatainak aszinkron API-k használatával történő beállításához kövesse az alábbi lépéseket:

  1. Adja hozzá a következő importálási utasításokat:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient
    
  2. Kód hozzáadása a program futtatásához a következő használatával: asyncio.run. Ez a függvény a példánkban futtatja az átadott koroutint, main() és kezeli az asyncio eseményhurokot. A koroutinok az async/await szintaxissal vannak deklarálva. Ebben a példában a main() coroutine először a BlobServiceClient segítségével létrehozza a async with felső szintet, majd meghívja a metódust, amely beállítja annak a blob metaadatait. Vegye figyelembe, hogy csak a legfelső szintű ügyfélnek kell használnia async with, mivel az abból létrehozott többi ügyfél ugyanazt a kapcsolatkészletet használja.

    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. Adjon hozzá kódot a blob metaadatainak beállításához. A kód megegyezik a szinkron példával, azzal a kivétellel, hogy a metódus a kulcsszóval async van deklarálva, és a await kulcsszót a rendszer a metódusok és get_blob_properties metódusok set_blob_metadata meghívásakor használja.

    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)
    

Ezzel az alapszintű beállítással a cikkben más példákat is implementálhat coroutinesként az aszinkron/várakozási szintaxis használatával.

Források

A rendszertulajdonságok és a felhasználó által definiált metaadatok Pythonhoz készült Azure Blob Storage-ügyfélkódtár használatával történő kezelésével kapcsolatos további információkért tekintse meg az alábbi erőforrásokat.

Kódminták

REST API-műveletek

Az Azure SDK for Python olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát jól ismert Python-paradigmákon keresztül. A rendszertulajdonságok és a felhasználó által definiált metaadatok kezelésére szolgáló ügyfélkódtár-metódusok a következő REST API-műveleteket használják:

Ügyfélkódtár erőforrásai