GitHub - arangodb/python-arango: The official ArangoDB Python driver. (original) (raw)

Logo

CircleCI CodeQL Docs Coverage Status Last commit

PyPI version badge Python versions badge

License Code style: black Downloads

Python-Arango

Python driver for ArangoDB, a scalable multi-model database natively supporting documents, graphs and search.

If you're interested in using asyncio, please check python-arango-async.

Requirements

Installation

pip install python-arango --upgrade

Getting Started

Here is a simple usage example:

from arango import ArangoClient

Initialize the client for ArangoDB.

client = ArangoClient(hosts="http://localhost:8529")

Connect to "_system" database as root user.

sys_db = client.db("_system", username="root", password="passwd")

Create a new database named "test".

sys_db.create_database("test")

Connect to "test" database as root user.

db = client.db("test", username="root", password="passwd")

Create a new collection named "students".

students = db.create_collection("students")

Add a persistent index to the collection.

students.add_index({'type': 'persistent', 'fields': ['name'], 'unique': True})

Insert new documents into the collection.

students.insert({"name": "jane", "age": 39}) students.insert({"name": "josh", "age": 18}) students.insert({"name": "judy", "age": 21})

Execute an AQL query and iterate through the result cursor.

cursor = db.aql.execute("FOR doc IN students RETURN doc") student_names = [document["name"] for document in cursor]

Another example with graphs:

from arango import ArangoClient

Initialize the client for ArangoDB.

client = ArangoClient(hosts="http://localhost:8529")

Connect to "test" database as root user.

db = client.db("test", username="root", password="passwd")

Create a new graph named "school".

graph = db.create_graph("school")

Create a new EnterpriseGraph [Enterprise Edition]

eegraph = db.create_graph( name="school", smart=True)

Create vertex collections for the graph.

students = graph.create_vertex_collection("students") lectures = graph.create_vertex_collection("lectures")

Create an edge definition (relation) for the graph.

edges = graph.create_edge_definition( edge_collection="register", from_vertex_collections=["students"], to_vertex_collections=["lectures"] )

Insert vertex documents into "students" (from) vertex collection.

students.insert({"_key": "01", "full_name": "Anna Smith"}) students.insert({"_key": "02", "full_name": "Jake Clark"}) students.insert({"_key": "03", "full_name": "Lisa Jones"})

Insert vertex documents into "lectures" (to) vertex collection.

lectures.insert({"_key": "MAT101", "title": "Calculus"}) lectures.insert({"_key": "STA101", "title": "Statistics"}) lectures.insert({"_key": "CSC101", "title": "Algorithms"})

Insert edge documents into "register" edge collection.

edges.insert({"_from": "students/01", "_to": "lectures/MAT101"}) edges.insert({"_from": "students/01", "_to": "lectures/STA101"}) edges.insert({"_from": "students/01", "_to": "lectures/CSC101"}) edges.insert({"_from": "students/02", "_to": "lectures/MAT101"}) edges.insert({"_from": "students/02", "_to": "lectures/STA101"}) edges.insert({"_from": "students/03", "_to": "lectures/CSC101"})

Traverse the graph in outbound direction, breath-first.

query = """ FOR v, e, p IN 1..3 OUTBOUND 'students/01' GRAPH 'school' OPTIONS { bfs: true, uniqueVertices: 'global' } RETURN {vertex: v, edge: e, path: p} """ cursor = db.aql.execute(query)

Please see the documentation for more details.