The hugegraph-python-client is a Python client/SDK for HugeGraph Database.
It is used to define graph structures, perform CRUD operations on graph data, manage schemas, and execute Gremlin queries. Both the hugegraph-llm and hugegraph-ml modules depend on this foundational library.
To install the hugegraph-python-client, you can use uv/pip or source code building:
# uv is optional, you can use pip directly uv pip install hugegraph-python # Note: may not the latest version, recommend to install from source # WIP: we will use 'hugegraph-python-client' as the package name soon
To install from the source, clone the repository and install the required dependencies:
git clone https://github.com/apache/incubator-hugegraph-ai.git cd incubator-hugegraph-ai/hugegraph-python-client # Use uv sync to install dependencies (workspace member) uv sync # Automatically creates .venv and installs dependencies source .venv/bin/activate # Activate once - all commands below assume this environment
[!NOTE] All usage examples below assume you're in the activated virtual environment
You can use the hugegraph-python-client to define graph structures. Below is an example of how to define a graph:
from pyhugegraph.client import PyHugeClient # Initialize the client # For HugeGraph API version ≥ v3: (Or enable graphspace function) # - The 'graphspace' parameter becomes relevant if graphspaces are enabled.(default name is 'DEFAULT') # - Otherwise, the graphspace parameter is optional and can be ignored. client = PyHugeClient("127.0.0.1", "8080", user="admin", pwd="admin", graph="hugegraph", graphspace="DEFAULT") """" Note: Could refer to the official REST-API doc of your HugeGraph version for accurate details. If some API is not as expected, please submit a issue or contact us. """ schema = client.schema() schema.propertyKey("name").asText().ifNotExist().create() schema.propertyKey("birthDate").asText().ifNotExist().create() schema.vertexLabel("Person").properties("name", "birthDate").usePrimaryKeyId().primaryKeys("name").ifNotExist().create() schema.vertexLabel("Movie").properties("name").usePrimaryKeyId().primaryKeys("name").ifNotExist().create() schema.edgeLabel("ActedIn").sourceLabel("Person").targetLabel("Movie").ifNotExist().create() print(schema.getVertexLabels()) print(schema.getEdgeLabels()) print(schema.getRelations()) # Init Graph g = client.graph() v_al_pacino = g.addVertex("Person", {"name": "Al Pacino", "birthDate": "1940-04-25"}) v_robert = g.addVertex("Person", {"name": "Robert De Niro", "birthDate": "1943-08-17"}) v_godfather = g.addVertex("Movie", {"name": "The Godfather"}) v_godfather2 = g.addVertex("Movie", {"name": "The Godfather Part II"}) v_godfather3 = g.addVertex("Movie", {"name": "The Godfather Coda The Death of Michael Corleone"}) g.addEdge("ActedIn", v_al_pacino.id, v_godfather.id, {}) g.addEdge("ActedIn", v_al_pacino.id, v_godfather2.id, {}) g.addEdge("ActedIn", v_al_pacino.id, v_godfather3.id, {}) g.addEdge("ActedIn", v_robert.id, v_godfather2.id, {}) res = g.getVertexById(v_al_pacino.id).label print(res) g.close()
The hugegraph-python-client provides comprehensive schema management capabilities.
# Define a property key client.schema().propertyKey('name').dataType('STRING').cardinality('SINGLE').create()
# Define a vertex label client.schema().vertexLabel('person').properties('name', 'age').primaryKeys('name').create()
# Define an edge label client.schema().edgeLabel('knows').sourceLabel('person').targetLabel('person').properties('since').create()
# Define an index label client.schema().indexLabel('personByName').onV('person').by('name').secondary().create()
The client allows you to perform CRUD operations on the graph data. Below are examples of how to create, read, update, and delete vertices and edges:
# Create vertices v1 = client.graph().addVertex('person').property('name', 'John').property('age', 29).create() v2 = client.graph().addVertex('person').property('name', 'Jane').property('age', 25).create() # Create an edge client.graph().addEdge(v1, 'knows', v2).property('since', '2020').create()
# Get a vertex by ID vertex = client.graph().getVertexById(v1.id) print(vertex) # Get an edge by ID edge = client.graph().getEdgeById(edge.id) print(edge)
# Update a vertex client.graph().updateVertex(v1.id).property('age', 30).update() # Update an edge client.graph().updateEdge(edge.id).property('since', '2021').update()
# Delete a vertex client.graph().deleteVertex(v1.id) # Delete an edge client.graph().deleteEdge(edge.id)
The client also supports executing Gremlin queries:
# Execute a Gremlin query g = client.gremlin() res = g.exec("g.V().limit(5)") print(res)
Other info is under 🚧 (Welcome to add more docs for it, users could refer java-client-doc for similar usage)
hugegraph-python-client. Please see the Guidelines for more information../style/code_format_and_analysis.sh to format your code before submitting a PR.Thank you to all the people who already contributed to hugegraph-python-client!