Async Python Driver for ArangoDB
Project description
python-arango-async
Python driver for ArangoDB, a scalable multi-model database natively supporting documents, graphs and search.
This is the asyncio alternative of the python-arango driver.
Note: This project is still in active development, features might be added or removed.
Requirements
- ArangoDB version 3.11+
- Python version 3.10+
Installation
pip install python-arango-async --upgrade
Getting Started
Here is a simple usage example:
from arangoasync import ArangoClient
from arangoasync.auth import Auth
async def main():
# Initialize the client for ArangoDB.
async with ArangoClient(hosts="http://localhost:8529") as client:
auth = Auth(username="root", password="passwd")
# Connect to "_system" database as root user.
sys_db = await client.db("_system", auth=auth)
# Create a new database named "test".
await sys_db.create_database("test")
# Connect to "test" database as root user.
db = await client.db("test", auth=auth)
# Create a new collection named "students".
students = await db.create_collection("students")
# Add a persistent index to the collection.
await students.add_index(type="persistent", fields=["name"], options={"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")
async with cursor:
student_names = []
async for doc in cursor:
student_names.append(doc["name"])
Another example with graphs:
async def main():
from arangoasync import ArangoClient
from arangoasync.auth import Auth
# Initialize the client for ArangoDB.
async with ArangoClient(hosts="http://localhost:8529") as client:
auth = Auth(username="root", password="passwd")
# Connect to "test" database as root user.
db = await client.db("test", auth=auth)
# Get the API wrapper for graph "school".
if await db.has_graph("school"):
graph = db.graph("school")
else:
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.
edges = 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 edges.insert({"_from": "students/01", "_to": "lectures/MAT101"})
await edges.insert({"_from": "students/01", "_to": "lectures/STA101"})
await edges.insert({"_from": "students/01", "_to": "lectures/CSC101"})
await edges.insert({"_from": "students/02", "_to": "lectures/MAT101"})
await edges.insert({"_from": "students/02", "_to": "lectures/STA101"})
await 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}
"""
async with await db.aql.execute(query) as cursor:
async for doc in cursor:
print(doc)
Please see the documentation for more details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_arango_async-0.0.5.tar.gz.
File metadata
- Download URL: python_arango_async-0.0.5.tar.gz
- Upload date:
- Size: 228.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e46f1b08e1ae5bb3006d79b0b68052db01264bfefb1db1a4013857c992ba9068
|
|
| MD5 |
b4a632fdac0c6794baf3d31deae26dd5
|
|
| BLAKE2b-256 |
f713506dda7603c4bb6f375f3fa429e6d8103c48fb589743b41aad24a20f9b3d
|
File details
Details for the file python_arango_async-0.0.5-py3-none-any.whl.
File metadata
- Download URL: python_arango_async-0.0.5-py3-none-any.whl
- Upload date:
- Size: 80.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
baaeaafc4d91a6ecd43d507b60d940eaeb49139d9178d145a843d308142b9f7d
|
|
| MD5 |
c33c2604ca8e8bbe418fbc7f7bc77dd2
|
|
| BLAKE2b-256 |
858f4eb13ba338ad3c87985e1324200bf39db9a36a91a15e08e6cf1cf7e5a0f7
|