Agent skill
surrealdb-python
Master SurrealDB 2.3.x with Python for multi-model database operations including CRUD, graph relationships, vector search, and real-time queries. Use when working with SurrealDB databases, implementing graph traversal, semantic search with embeddings, or building RAG applications.
Install this agent skill to your Project
npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/activeinferenceinstitute/surrealdb-python
SKILL.md
SurrealDB Python
Overview
SurrealDB is a multi-model database that combines document, graph, and vector search capabilities in a single system. This skill provides comprehensive guidance for working with SurrealDB 2.3.x using the Python SDK, covering standard database operations, graph relationships, vector similarity search, and real-time data subscriptions.
When to Use This Skill
Apply this skill when:
- Setting up SurrealDB connections and performing CRUD operations
- Implementing graph databases with the RELATE statement and traversal queries
- Building semantic search or RAG (Retrieval-Augmented Generation) applications with vector embeddings
- Creating real-time applications with live queries
- Designing multi-model schemas that combine documents, graphs, and vectors
Core Capabilities
1. Connection and Authentication
Establish connections to SurrealDB using the Python SDK with proper authentication:
from surrealdb import AsyncSurreal
async with AsyncSurreal("ws://localhost:8000/rpc") as db:
await db.signin({"user": "root", "pass": "root"})
await db.use("namespace", "database")
# Perform operations
2. CRUD Operations
Perform standard database operations using intuitive Python methods:
- create() - Insert new records with specific or auto-generated IDs
- select() - Retrieve single records or entire tables
- update() - Replace entire record contents
- merge() - Partially update records by merging new fields
- patch() - Apply JSON Patch operations for precise modifications
- upsert() - Create if absent, update if present
- delete() - Remove records or entire tables
- query() - Execute raw SurrealQL for complex operations
Example workflow:
# Create
user = await db.create("user", {
"name": "Alice",
"email": "alice@example.com"
})
# Update specific fields
await db.merge("user:alice", {"age": 30})
# Query with parameters
results = await db.query(
"SELECT * FROM user WHERE age > $min_age",
{"min_age": 25}
)
3. Graph Database Operations
Leverage SurrealDB's native graph capabilities to model and traverse relationships without JOINs:
Creating Relationships:
# Create entities
await db.create("person:alice", {"name": "Alice"})
await db.create("person:bob", {"name": "Bob"})
# Create relationship with metadata
await db.query("""
RELATE person:alice->knows->person:bob
SET since = "2024-01-01", strength = "close"
""")
Traversing Graphs:
# Find friends of friends
result = await db.query("""
SELECT ->knows->person->knows->person AS friends_of_friends
FROM person:alice
""")
# Bidirectional traversal
result = await db.query("""
SELECT <->connected_to<->city AS connected_cities
FROM city:nyc
""")
# Recursive queries (variable depth)
result = await db.query("""
SELECT @.{1,5}->manages->person AS management_chain
FROM person:ceo
""")
Key Graph Features:
- RELATE statement for creating edges between nodes
- Arrow syntax (
->,<->) for intuitive traversal - Recursive patterns with
@.{depth}notation - Graph clauses for filtering during traversal
- Edge tables that store relationship metadata
For comprehensive graph patterns, schema definitions, and best practices, see references/graph_operations.md.
4. Vector Search and Embeddings
Implement semantic search and similarity-based retrieval using vector embeddings:
Storing Vectors:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
# Generate and store embedding
text = "SurrealDB is a multi-model database"
embedding = model.encode(text).tolist()
await db.create("documents", {
"content": text,
"embedding": embedding,
"metadata": {"source": "docs"}
})
Semantic Search with KNN:
# Generate query embedding
query_text = "database features"
query_embedding = model.encode(query_text).tolist()
# Find 5 most similar documents
result = await db.query("""
SELECT content,
vector::similarity::cosine(embedding, $query_vector) AS similarity
FROM documents
WHERE embedding <|5|> $query_vector
ORDER BY similarity DESC
""", {"query_vector": query_embedding})
Key Vector Features:
- KNN operator
<|k|>for k-nearest neighbor search - Multiple distance metrics (cosine, euclidean, manhattan)
- Hybrid search combining vector and full-text search
- Integration with popular embedding models (OpenAI, HuggingFace, Sentence Transformers)
For complete RAG implementations, embedding model comparisons, and optimization techniques, reference references/vector_search.md.
5. Real-Time Queries
Subscribe to live data changes for real-time applications:
# Start live query
live_id = await db.live("user")
# Subscribe to changes
async for notification in db.subscribe_live(live_id):
action = notification['action'] # 'CREATE', 'UPDATE', 'DELETE'
data = notification['result']
print(f"Change detected: {action} - {data}")
# Stop live query when done
await db.kill(live_id)
Workflow Patterns
Building a RAG Application
-
Define Schema:
pythonawait db.query(""" DEFINE TABLE documents SCHEMAFULL; DEFINE FIELD content ON TABLE documents TYPE string; DEFINE FIELD embedding ON TABLE documents TYPE array; DEFINE FIELD metadata ON TABLE documents TYPE object; """) -
Index Documents:
pythonfor doc in documents: embedding = model.encode(doc["content"]).tolist() await db.create("documents", { "content": doc["content"], "embedding": embedding, "metadata": doc.get("metadata", {}) }) -
Semantic Search:
pythonquery_embedding = model.encode("user query").tolist() results = await db.query(""" SELECT content, metadata, vector::similarity::cosine(embedding, $query_vector) AS score FROM documents WHERE embedding <|5|> $query_vector ORDER BY score DESC """, {"query_vector": query_embedding}) -
Pass to LLM: Use retrieved context with language model for generation
Implementing a Knowledge Graph
-
Create Entities:
pythonawait db.create("concept:ai", {"name": "Artificial Intelligence"}) await db.create("concept:ml", {"name": "Machine Learning"}) -
Define Relationships:
pythonawait db.query(""" RELATE concept:ml->is_subset_of->concept:ai SET confidence = 0.95 """) -
Traverse and Query:
python# Find all parent concepts recursively result = await db.query(""" SELECT @.{1,}->is_subset_of->concept AS parents FROM concept:ml """)
Combining Graph and Vector Search
Leverage both graph relationships and semantic similarity:
# Find semantically similar documents connected through graph relationships
result = await db.query("""
SELECT *,
vector::similarity::cosine(embedding, $query_vector) AS vec_score
FROM documents
WHERE embedding <|10|> $query_vector
AND ->cited_by->document<-authored_by<-person = $author_id
ORDER BY vec_score DESC
""", {
"query_vector": query_embedding,
"author_id": "person:researcher1"
})
Best Practices
Connection Management
- Use context managers (
async with) for automatic cleanup - Handle
SurrealExceptionfor proper error handling - Set appropriate timeouts for long-running queries
Schema Design
- Define schemas with
SCHEMAFULLfor data integrity - Create indexes on frequently queried fields
- Use assertions for validation and referential integrity
Graph Operations
- Define unique indexes on edge tables to prevent duplicate relationships
- Add timeouts to recursive queries (
TIMEOUT 5s) - Use
FETCHto optimize queries that need related data - Store metadata in edge tables when relationships have properties
Vector Search
- Choose embedding models appropriate for your domain and latency requirements
- Normalize embeddings when using cosine similarity
- Create indexes on vector fields for production workloads
- Chunk long documents (500-1000 tokens) with overlap for better retrieval
- Combine vector search with metadata filtering for precision
Query Optimization
- Parameterize queries to prevent injection attacks
- Batch operations when inserting multiple records
- Use appropriate k values for KNN (3-5 for precision, 10-20 for recall)
- Leverage hybrid search (vector + full-text) for best results
Common Use Cases
Semantic Search & RAG: Store document embeddings and perform similarity searches to retrieve relevant context for language models.
Knowledge Graphs: Model complex relationships between entities with typed edges and metadata, enabling sophisticated graph traversal queries.
Social Networks: Represent users and their connections, traverse friend relationships, and find mutual connections or recommendations.
Recommendation Systems: Combine collaborative filtering (graph relationships) with content-based filtering (vector similarity) for hybrid recommendations.
Real-Time Applications: Subscribe to data changes for live dashboards, chat applications, or notification systems.
Reference Documentation
This skill includes comprehensive reference documentation:
references/graph_operations.md- In-depth guide to graph database operations, RELATE syntax, traversal patterns, and schema designreferences/vector_search.md- Vector search implementation details, embedding model comparisons, RAG patterns, and LangChain integration
Load these references when implementing specific features or troubleshooting issues.
Additional Resources
- Repository: github.com/surrealdb/surrealdb.py
- PyPI Package: pypi.org/project/surrealdb
- Official Documentation: surrealdb.com/docs
- SurrealQL Reference: surrealdb.com/docs/surrealql
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
perigon-backend
Perigon ASP.NET Core + EF Core + Aspire conventions
perigon-agent
Pointers for Copilot/agents to apply Perigon conventions
perigon-angular
Angular 21+ standalone/Material/signal conventions for Perigon WebApp
fastapi-mastery
Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.
context7-efficient
Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.
browser-use
Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.
Didn't find tool you were looking for?