Code-first database toolkit for SurrealDB - schema definitions, migrations, query building, and typed CRUD.
Project description
surql
A code-first database toolkit for SurrealDB. Define schemas, generate migrations, build queries, and perform typed CRUD -- all from Python.
Features
- Code-First Migrations - Schema changes defined in code with automatic migration generation
- Type-Safe Query Builder - Composable queries with Pydantic model integration
- Vector Search - HNSW and MTREE index support with 8 distance metrics and EFC/M tuning
- Graph Traversal - Native SurrealDB graph features with edge relationships
- Query Caching - Memory and Redis-backed caching with
@cache_querydecorator - Live Queries - Real-time change notifications and streaming
- Schema Visualization - Mermaid, GraphViz, and ASCII diagrams
- CLI Tools - Migrations, schema inspection, validation, and database management
- Async-First - Built with async/await, connection pooling, and retry logic
Quick Start
pip install oneiriq-surql
# or with uv
uv add oneiriq-surql
from surql.schema.fields import string_field, int_field, datetime_field
from surql.schema.table import table_schema, unique_index, TableMode
user_schema = table_schema(
'user',
mode=TableMode.SCHEMAFULL,
fields=[
string_field('name'),
string_field('email', assertion='string::is::email($value)'),
int_field('age', assertion='$value >= 0 AND $value <= 150'),
datetime_field('created_at', default='time::now()', readonly=True),
],
indexes=[unique_index('email_idx', ['email'])],
)
surql migrate create "Add user table"
surql migrate up
surql migrate status
Documentation
Full documentation at oneiriq.github.io/surql-py.
Requirements
- Python 3.12+
- SurrealDB 1.0+
License
Apache License 2.0 - see LICENSE.
TypeScript / Deno / Node.js
Looking for SurrealDB tooling in TypeScript? Check out surql -- a type-safe query builder and client for SurrealDB available on JSR and NPM.
Support
- Documentation: oneiriq.github.io/surql-py
- Issues: GitHub Issues
- Changelog: CHANGES
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 oneiriq_surql-1.1.0.tar.gz.
File metadata
- Download URL: oneiriq_surql-1.1.0.tar.gz
- Upload date:
- Size: 527.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99e0b2e0607d52b4041630b3df31d5a0f6ef65953731421c9befd05438c10751
|
|
| MD5 |
c197dd69ede517aa66218e98f96c292e
|
|
| BLAKE2b-256 |
e6b7f07e1cce95ab4b85c2bfd5f3852e8de9382874f4dd7c5ce99c5cdabc89da
|
Provenance
The following attestation bundles were made for oneiriq_surql-1.1.0.tar.gz:
Publisher:
publish.yml on Oneiriq/surql-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oneiriq_surql-1.1.0.tar.gz -
Subject digest:
99e0b2e0607d52b4041630b3df31d5a0f6ef65953731421c9befd05438c10751 - Sigstore transparency entry: 1143276324
- Sigstore integration time:
-
Permalink:
Oneiriq/surql-py@86d1f9020781296ca5706566d0a573d126be8899 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/Oneiriq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@86d1f9020781296ca5706566d0a573d126be8899 -
Trigger Event:
release
-
Statement type:
File details
Details for the file oneiriq_surql-1.1.0-py3-none-any.whl.
File metadata
- Download URL: oneiriq_surql-1.1.0-py3-none-any.whl
- Upload date:
- Size: 207.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c685e3d9cf2e8e29ffd2971a352e8402033f15c70e64ed1257ac0806efcac34
|
|
| MD5 |
21c43da0c00e9e418b40c20eabea9bf4
|
|
| BLAKE2b-256 |
56ca3035e913aed4cb99a8c896ec30d45381a7610fb8d342cb7e211db03cd1fd
|
Provenance
The following attestation bundles were made for oneiriq_surql-1.1.0-py3-none-any.whl:
Publisher:
publish.yml on Oneiriq/surql-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oneiriq_surql-1.1.0-py3-none-any.whl -
Subject digest:
8c685e3d9cf2e8e29ffd2971a352e8402033f15c70e64ed1257ac0806efcac34 - Sigstore transparency entry: 1143276428
- Sigstore integration time:
-
Permalink:
Oneiriq/surql-py@86d1f9020781296ca5706566d0a573d126be8899 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/Oneiriq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@86d1f9020781296ca5706566d0a573d126be8899 -
Trigger Event:
release
-
Statement type: