Skip to main content

Lightweight Django-style ORM for SurrealDB using the official Python SDK. Async support with Pydantic validation.

Project description

Surreal ORM Lite

Python SurrealDB SDK License codecov

Surreal ORM Lite is a lightweight, Django-style ORM for SurrealDB that uses the official SurrealDB Python SDK. It provides a simple and intuitive interface for database operations with full async support and Pydantic validation.

Why This Project?

This ORM is designed to:

  • Use the official SurrealDB SDK (surrealdb>=1.0.8) for maximum compatibility
  • Stay lightweight with minimal dependencies
  • Keep up-to-date with SurrealDB and SDK releases
  • Provide Django-style query syntax that developers love

Requirements

Dependency Version
Python 3.11+
SurrealDB 2.6.0+
Official SDK surrealdb>=1.0.8
Pydantic >=2.12.5

Installation

pip install surreal-orm-lite

Or with uv:

uv add surreal-orm-lite

Quick Start

1. Configure the Connection

from surreal_orm_lite import SurrealDBConnectionManager

SurrealDBConnectionManager.set_connection(
    url="http://localhost:8000",
    user="root",
    password="root",
    namespace="my_namespace",
    database="my_database",
)

2. Define a Model

from surreal_orm_lite import BaseSurrealModel
from pydantic import Field

class User(BaseSurrealModel):
    id: str | None = None
    name: str = Field(..., max_length=100)
    email: str
    age: int = Field(..., ge=0)

3. CRUD Operations

# Create
user = User(name="Alice", email="alice@example.com", age=30)
await user.save()

# Read
user = await User.objects().get("alice_id")
users = await User.objects().filter(age__gte=18).exec()

# Update
user.age = 31
await user.update()

# Or partial update
await user.merge(age=31)

# Delete
await user.delete()

4. QuerySet Methods

# Filter with Django-style lookups
users = await User.objects().filter(
    age__gte=18,
    name__startswith="A"
).exec()

# Ordering
users = await User.objects().order_by("name").exec()
users = await User.objects().order_by("age", OrderBy.DESC).exec()

# Pagination
users = await User.objects().limit(10).offset(20).exec()

# Select specific fields
results = await User.objects().select("name", "email").exec()

# Get first result
user = await User.objects().filter(name="Alice").first()

# Get all records
all_users = await User.objects().all()

# Custom query
results = await User.objects().query(
    "SELECT * FROM User WHERE age > $min_age",
    {"min_age": 21}
)

Features

Feature Status
Async/await support
Pydantic validation
CRUD operations
QuerySet with filters
Django-style lookups
Custom primary keys
HTTP connections
WebSocket connections

Supported Filter Lookups

  • exact (default)
  • gt, gte, lt, lte
  • in
  • contains, icontains
  • startswith, istartswith
  • endswith, iendswith

Configuration Options

Custom Primary Key

from surreal_orm_lite import BaseSurrealModel, SurrealConfigDict

class Product(BaseSurrealModel):
    model_config = SurrealConfigDict(primary_key="sku")

    sku: str
    name: str
    price: float

Context Manager

async with SurrealDBConnectionManager():
    users = await User.objects().all()
# Connection automatically closed

Compatibility

This ORM is tested and compatible with:

SurrealDB Version SDK Version Status
2.6.0 1.0.8 ✅ Tested
2.5.x 1.0.8 ✅ Compatible

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m "Add amazing feature")
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Advanced Features?

This project prioritizes stability and compatibility with the official SurrealDB Python SDK. Due to current SDK limitations, some advanced features cannot be implemented here.

For a feature-rich ORM with relations, transactions, and more, see:

When the official SDK supports additional features, they will be incorporated into this lite version.


License

MIT License - see LICENSE for details.


Author

Yannick Croteau GitHub: @EulogySnowfall


Related Projects

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

surreal_orm_lite-0.2.2.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

surreal_orm_lite-0.2.2-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file surreal_orm_lite-0.2.2.tar.gz.

File metadata

  • Download URL: surreal_orm_lite-0.2.2.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for surreal_orm_lite-0.2.2.tar.gz
Algorithm Hash digest
SHA256 ff84d774e467c1faac8833eb0731eee5596e71f4bc02bb43b00498422051aaaa
MD5 ad30e6923c8114dc8b6177e9b27c391d
BLAKE2b-256 bee892a44609172a2474a2c55dade0eb3768d44fc8ed7fa3aa2df818e5a8fc0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for surreal_orm_lite-0.2.2.tar.gz:

Publisher: publish.yml on EulogySnowfall/SurrealDB-ORM-lite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file surreal_orm_lite-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for surreal_orm_lite-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ace12ff940423ddb8d5f70a22551245c5496752784f832a5e45289adc8695e8f
MD5 fda64f729a40606c3d47537f9ec7ca3f
BLAKE2b-256 212df2da4d8c9f5abc23bf616b6640ebc1d6d146c63f8c2fabbca1e503919322

See more details on using hashes here.

Provenance

The following attestation bundles were made for surreal_orm_lite-0.2.2-py3-none-any.whl:

Publisher: publish.yml on EulogySnowfall/SurrealDB-ORM-lite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page