Welcome to the GitHub page for aioarangodb, a Python driver for ArangoDB Asyncio only.
- This project is a fork of https://github.com/joowani/python-arango with only asyncio python>=3.5 support. Many thanks for the great job.
- Pythonic interface
- Lightweight
- High API coverage
- Python versions 3.5, 3.6 and 3.7 are supported
- aioArangoDB supports ArangoDB 3.5+
To install a stable version from PyPi:
~$ pip install aioarangodb
To install the latest version directly from GitHub:
~$ pip install -e git+git@github.com:bloodbare/aioarangodb.git@master#egg=aioarangodb
You may need to use sudo
depending on your environment.
Here is a simple usage example:
from aioarangodb import ArangoClient
# Initialize the client for ArangoDB.
client = ArangoClient(hosts='http://localhost:8529')
# Connect to "_system" database as root user.
sys_db = await client.db('_system', username='root', password='passwd')
# Create a new database named "test".
await await sys_db.create_database('test')
# Connect to "test" database as root user.
db = await client.db('test', username='root', password='passwd')
# Create a new collection named "students".
students = await db.create_collection('students')
# Add a hash index to the collection.
await students.add_hash_index(fields=['name'], unique=True)
# Insert new documents into the collection.
await students.insert({'name': 'jane', 'age': 39})
await students.insert({'name': 'josh', 'age': 18})
await students.insert({'name': 'judy', 'age': 21})
# Execute an AQL query and iterate through the result cursor.
cursor = await db.aql.execute('FOR doc IN students RETURN doc')
student_names = [document['name'] async for document in cursor]
Here is another example with graphs:
from aioarangodb import ArangoClient
# Initialize the client for ArangoDB.
client = ArangoClient(hosts='http://localhost:8529')
# Connect to "test" database as root user.
db = await client.db('test', username='root', password='passwd')
# Create a new graph named "school".
graph = await db.create_graph('school')
# Create vertex collections for the graph.
students = await graph.create_vertex_collection('students')
lectures = await graph.create_vertex_collection('lectures')
# Create an edge definition (relation) for the graph.
register = await graph.create_edge_definition(
edge_collection='register',
from_vertex_collections=['students'],
to_vertex_collections=['lectures']
)
# Insert vertex documents into "students" (from) vertex collection.
await students.insert({'_key': '01', 'full_name': 'Anna Smith'})
await students.insert({'_key': '02', 'full_name': 'Jake Clark'})
await students.insert({'_key': '03', 'full_name': 'Lisa Jones'})
# Insert vertex documents into "lectures" (to) vertex collection.
await lectures.insert({'_key': 'MAT101', 'title': 'Calculus'})
await lectures.insert({'_key': 'STA101', 'title': 'Statistics'})
await lectures.insert({'_key': 'CSC101', 'title': 'Algorithms'})
# Insert edge documents into "register" edge collection.
await register.insert({'_from': 'students/01', '_to': 'lectures/MAT101'})
await register.insert({'_from': 'students/01', '_to': 'lectures/STA101'})
await register.insert({'_from': 'students/01', '_to': 'lectures/CSC101'})
await register.insert({'_from': 'students/02', '_to': 'lectures/MAT101'})
await register.insert({'_from': 'students/02', '_to': 'lectures/STA101'})
await register.insert({'_from': 'students/03', '_to': 'lectures/CSC101'})
# Traverse the graph in outbound direction, breadth-first.
result = await graph.traverse(
start_vertex='students/01',
direction='outbound',
strategy='breadthfirst'
)
Check out the documentation for more information.
Please take a look at this page before submitting a pull request. Thanks!