Delen via


Quickstart: Azure Cosmos DB voor Apache Gremlin-clientbibliotheek voor Python

Belangrijk

Zoekt u een databaseoplossing voor grootschalige scenario's met een 99.999% SLA (Availability Service Level Agreement), directe automatische schaalaanpassing en automatische failover in meerdere regio's? Overweeg Azure Cosmos DB voor NoSQL.

Wilt u een OLAP-graaf (Online Analytical Processing) implementeren of een bestaande Apache Gremlin-toepassing migreren? Overweeg Graph in Microsoft Fabric.

Ga aan de slag met de Azure Cosmos DB voor Apache Gremlin-clientbibliotheek voor Python om ongestructureerde gegevens op te slaan, te beheren en er query's op uit te voeren. Volg de stappen in deze handleiding om een nieuw account te maken, een Python-clientbibliotheek te installeren, verbinding te maken met het account, algemene bewerkingen uit te voeren en uw uiteindelijke voorbeeldgegevens op te vragen.

| Broncodepakket bibliotheek (PyPi)

Vereisten

  • Een Azure-abonnement

    • Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.
  • De nieuwste versie van de Azure CLI in Azure Cloud Shell.

    • Als u liever CLI-referentieopdrachten lokaal uitvoert, meldt u zich aan bij de Azure CLI met behulp van de az login opdracht.
  • Python 3.12 of hoger

Instellen

Stel eerst de account- en ontwikkelomgeving voor deze handleiding in. In deze sectie wordt u begeleid bij het maken van een account, het verkrijgen van de referenties en het voorbereiden van uw ontwikkelomgeving.

Een account maken

Begin met het maken van een API voor een Apache Gremlin-account. Zodra het account is gemaakt, maakt u de database- en grafbronnen aan.

  1. Als u nog geen doelresourcegroep hebt, gebruikt u de az group create opdracht om een nieuwe resourcegroep in uw abonnement te maken.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. Gebruik de az cosmosdb create opdracht om een nieuw Azure Cosmos DB voor Apache Gremlin-account te maken met standaardinstellingen.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableGremlin"
    
  3. Maak een nieuwe database met de az cosmosdb gremlin database create naam cosmicworks.

    az cosmosdb gremlin database create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. Gebruik de opdracht om een nieuwe grafiek met de az cosmosdb gremlin graph create naam productste maken.

    az cosmosdb gremlin graph create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --database-name "cosmicworks" \
        --name "products" \
        --partition-key-path "/category"
    

Referenties ophalen

Haal nu het wachtwoord op dat de clientbibliotheek moet gebruiken om een verbinding te maken met het onlangs gemaakte account.

  1. Gebruik az cosmosdb show om de host voor het account te verkrijgen.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{host:name}"
    
  2. Noteer de waarde van de host eigenschap uit de uitvoer van de vorige opdrachten. De waarde van deze eigenschap is de host die u verderop in deze handleiding gebruikt om verbinding te maken met het account met de bibliotheek.

  3. Gebruik az cosmosdb keys list om de sleutels op te halen voor het account.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Noteer de waarde van de primaryMasterKey eigenschap uit de uitvoer van de vorige opdrachten. De waarde van deze eigenschap is de sleutel die u verderop in deze handleiding gebruikt om verbinding te maken met het account met de bibliotheek.

Ontwikkelomgeving voorbereiden

Configureer vervolgens uw ontwikkelomgeving met een nieuw project en de clientbibliotheek. Deze stap is het laatste vereiste voordat u verdergaat met de rest van deze handleiding.

  1. Begin in een lege map.

  2. Importeer het gremlinpython pakket uit Python Package Index (PyPI).

    pip install gremlinpython
    
  3. Maak het bestand app.py .

Objectmodel

Beschrijving
GremlinClient Vertegenwoordigt de client die wordt gebruikt om verbinding te maken en te communiceren met de Gremlin-server
GraphTraversalSource Wordt gebruikt om Gremlin-traversals te maken en uit te voeren

Codevoorbeelden

Client verifiëren

Begin met het authentificeren van de client met behulp van de inloggegevens die eerder in deze handleiding zijn verzameld.

  1. Open het bestand app.py in uw IDE (Integrated Development Environment).

  2. Importeer de volgende typen uit de gremlin_python.driver bibliotheek:

    • gremlin_python.driver.client
    • gremlin_python.driver.serializer
    from gremlin_python.driver import client, serializer
    
  3. Maak stringvariabelen voor de in deze handleiding eerder verzamelde inloggegevens. Geef de variabelen hostname een naam en primary_key.

    hostname = "<host>"
    primary_key = "<key>"
    
  4. Maak een Client object met behulp van de referenties en configuratievariabelen die in de vorige stappen zijn gemaakt. Geef de variabele clienteen naam.

    client = client.Client(
        url=f"wss://{hostname}.gremlin.cosmos.azure.com:443/",
        traversal_source="g",
        username="/dbs/cosmicworks/colls/products",
        password=f"{primary_key}",
        message_serializer=serializer.GraphSONSerializersV2d0()
    )
    

Gegevens invoegen

Voeg vervolgens nieuwe hoekpunt- en randgegevens in de grafiek in. Voordat u de nieuwe gegevens maakt, verwijdert u alle bestaande gegevens uit de grafiek.

  1. Voer de g.V().drop() query uit om alle hoekpunten en randen uit de grafiek te wissen.

    client.submit("g.V().drop()").all().result()
    
  2. Maak een Gremlin-query waarmee een hoekpunt wordt toegevoegd.

    insert_vertex_query = (
        "g.addV('product')"
        ".property('id', prop_id)"
        ".property('name', prop_name)"
        ".property('category', prop_category)"
        ".property('quantity', prop_quantity)"
        ".property('price', prop_price)"
        ".property('clearance', prop_clearance)"
    )
    
  3. Voeg een hoekpunt toe voor één product.

    client.submit(
        message=insert_vertex_query,
        bindings={
            "prop_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
            "prop_name": "Yamba Surfboard",
            "prop_category": "gear-surf-surfboards",
            "prop_quantity": 12,
            "prop_price": 850.00,
            "prop_clearance": False,
        },
    ).all().result()
    
  4. Voeg nog twee hoekpunten toe voor twee extra producten.

    client.submit(
        message=insert_vertex_query,
        bindings={
            "prop_id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
            "prop_name": "Montau Turtle Surfboard",
            "prop_category": "gear-surf-surfboards",
            "prop_quantity": 5,
            "prop_price": 600.00,
            "prop_clearance": True,
        },
    ).all().result()
    
    client.submit(
        message=insert_vertex_query,
        bindings={
            "prop_id": "cccccccc-2222-3333-4444-dddddddddddd",
            "prop_name": "Noosa Surfboard",
            "prop_category": "gear-surf-surfboards",
            "prop_quantity": 31,
            "prop_price": 1100.00,
            "prop_clearance": False,
        },
    ).all().result()
    
  5. Maak een andere Gremlin-query waarmee een rand wordt toegevoegd.

    insert_edge_query = (
        "g.V([prop_partition_key, prop_source_id])"
        ".addE('replaces')"
        ".to(g.V([prop_partition_key, prop_target_id]))"
    )
    
  6. Voeg twee randen toe.

    client.submit(
        message=insert_edge_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_source_id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
            "prop_target_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        },
    ).all().result()
    
    client.submit(
        message=insert_edge_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_source_id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
            "prop_target_id": "cccccccc-2222-3333-4444-dddddddddddd",
        },
    ).all().result()
    

Gegevens lezen

Lees vervolgens gegevens die eerder in de grafiek zijn ingevoegd.

  1. Maak een query die een hoekpunt leest met behulp van de unieke id en partitiesleutelwaarde.

    read_vertex_query = "g.V([prop_partition_key, prop_id])"
    
  2. Lees vervolgens een hoekpunt door de vereiste parameters op te geven.

    matched_item = client.submit(
        message=read_vertex_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
        }
    ).one()
    

Gegevens opvragen

Gebruik ten slotte een query om alle gegevens te vinden die overeenkomen met een specifieke doorkruising of filter in de grafiek.

  1. Maak een query waarmee alle hoekpunten worden gevonden die vanuit een specifiek hoekpunt worden doorkruist.

    find_vertices_query = (
        "g.V().hasLabel('product')"
        ".has('category', prop_partition_key)"
        ".has('name', prop_name)"
        ".outE('replaces').inV()"
    )
    
  2. Voer de query uit waarin het Montau Turtle Surfboard product wordt opgegeven.

    find_results = client.submit(
        message=find_vertices_query,
        bindings={
            "prop_partition_key": "gear-surf-surfboards",
            "prop_name": "Montau Turtle Surfboard",
        },
    ).all().result()
    
  3. Itereer over de queryresultaten.

    for result in find_results:
        # Do something here with each result
    

De code uitvoeren

Voer de zojuist gemaakte toepassing uit met behulp van een terminal in uw toepassingsmap.

python app.py

Resources opschonen

Wanneer u het account niet meer nodig hebt, verwijdert u het account uit uw Azure-abonnement door de resource te verwijderen .

az cosmosdb delete \
    --resource-group "<resource-group-name>" \
    --name "<account-name>"