Skip to main content

SurrealDB python client

Project description


 

The official SurrealDB SDK for Python.


         

     

surrealdb.py

The official SurrealDB SDK for Python.

Documentation

How to install

# Using pip
pip install surrealdb

# Using uv
uv add surrealdb

Quick start

In this short guide, you will learn how to install, import, and initialize the SDK, as well as perform the basic data manipulation queries.

This guide uses the Surreal class, but this example would also work with AsyncSurreal class, with the addition of await in front of the class methods.

Running SurrealDB

You can run SurrealDB locally or start with a free SurrealDB cloud account.

For local, two options:

  1. Install SurrealDB and run SurrealDB. Run in-memory with:
surreal start -u root -p root
  1. Run with Docker.
docker run --rm --pull always -p 8000:8000 surrealdb/surrealdb:latest start

Learn the basics

# Import the Surreal class
from surrealdb import Surreal

# Using a context manger to automatically connect and disconnect
with Surreal("ws://localhost:8000/rpc") as db:
    db.signin({"username": 'root', "password": 'root'})
    db.use("namepace_test", "database_test")

    # Create a record in the person table
    db.create(
        "person",
        {
            "user": "me",
            "password": "safe",
            "marketing": True,
            "tags": ["python", "documentation"],
        },
    )

    # Read all the records in the table
    print(db.select("person"))

    # Update all records in the table
    print(db.update("person", {
        "user":"you",
        "password":"very_safe",
        "marketing": False,
        "tags": ["Awesome"]
    }))

    # Delete all records in the table
    print(db.delete("person"))

    # You can also use the query method 
    # doing all of the above and more in SurrealQl
    
    # In SurrealQL you can do a direct insert 
    # and the table will be created if it doesn't exist
    
    # Create
    db.query("""
    insert into person {
        user: 'me',
        password: 'very_safe',
        tags: ['python', 'documentation']
    };
    """)

    # Read
    print(db.query("select * from person"))
    
    # Update
    print(db.query("""
    update person content {
        user: 'you',
        password: 'more_safe',
        tags: ['awesome']
    };
    """))

    # Delete
    print(db.query("delete person"))

Embedded Database

SurrealDB can also run embedded directly within your Python application natively. This provides a fully-featured database without needing a separate server process.

Installation

The embedded database is included when you install surrealdb.

For source builds, you'll need Rust toolchain and maturin:

uv run maturin develop --release

In-Memory Database

Perfect for embedded applications, development, testing, caching, or temporary data.

import asyncio
from surrealdb import AsyncSurreal

async def main():
    # Create an in-memory database (can use "mem://" or "memory")
    async with AsyncSurreal("memory") as db:
        await db.use("test", "test")
        await db.signin({"username": "root", "password": "root"})
        
        # Use like any other SurrealDB connection
        person = await db.create("person", {
            "name": "John Doe",
            "age": 30
        })
        print(person)
        
        people = await db.select("person")
        print(people)

asyncio.run(main())

File-Based Persistent Database

For persistent local storage:

import asyncio
from surrealdb import AsyncSurreal

async def main():
    # Create a file-based database (can use "file://", "surrealkv://", or "surrealkv+versioned://")
    async with AsyncSurreal("file://mydb") as db:
        await db.use("test", "test")
        await db.signin({"username": "root", "password": "root"})
        
        # Data persists across connections
        await db.create("company", {
            "name": "Acme Corp",
            "employees": 100
        })
        
        companies = await db.select("company")
        print(companies)

asyncio.run(main())

Blocking (Sync) API

The embedded database also supports the blocking API:

from surrealdb import Surreal

# In-memory (can use "mem://" or "memory")
with Surreal("memory") as db:
    db.use("test", "test")
    db.signin({"username": "root", "password": "root"})
    
    person = db.create("person", {"name": "Jane"})
    print(person)

# File-based
with Surreal("file://mydb") as db:
    db.use("test", "test")
    db.signin({"username": "root", "password": "root"})
    
    company = db.create("company", {"name": "TechStart"})
    print(company)

When to Use Embedded vs Remote

Use Embedded (memory, mem://, file://, surrealkv://, or surrealkv+versioned://) when:

  • Building desktop applications
  • Running tests (in-memory is very fast)
  • Local development without server setup
  • Embedded systems or edge computing
  • Single-application data storage

Use Remote (ws:// or http://) when:

  • Multiple applications share data
  • Distributed systems
  • Cloud deployments
  • Need horizontal scaling
  • Centralized data management

For more examples, see the examples/embedded/ directory.

Sessions and transactions

Multi-session and client-side transactions are supported only for WebSocket connections (ws:// or wss://). They are not available for HTTP or embedded connections.

  • Sessions: Call attach() on a WS connection to create a new session (returns a UUID). Use new_session() to get an AsyncSurrealSession or BlockingSurrealSession that scopes all operations to that session. Call close_session() on the session (or detach(session_id) on the connection) to drop it.
  • Transactions: On a session (or the default connection), call begin_transaction() to start a transaction (returns AsyncSurrealTransaction or BlockingSurrealTransaction). Run queries on the transaction object; then call commit() or cancel() to finish.

Example (async WS):

from surrealdb import AsyncSurreal

async with AsyncSurreal("ws://localhost:8000/rpc") as db:
    await db.signin({"username": "root", "password": "root"})
    await db.use("test", "test")

    session = await db.new_session()
    await session.use("test", "test")
    result = await session.query("SELECT 1")

    txn = await session.begin_transaction()
    await txn.query("CREATE person SET name = 'x'")
    await txn.commit()

    await session.close_session()

On HTTP or embedded connections, attach(), detach(), begin(), commit(), cancel(), and new_session() raise NotImplementedError with a message that sessions/transactions are only supported for WebSocket connections.

Observability with Logfire

Pydantic Logfire provides automatic instrumentation for SurrealDB operations, giving you instant observability into your database interactions. Logfire exports standard OpenTelemetry spans, making it compatible with any observability platform.

Quick Start

Install Logfire using pip:

pip install logfire

Or install using uv:

uv add logfire

Enable instrumentation:

import logfire
from surrealdb import AsyncSurreal

# Configure Logfire
logfire.configure()

# Instrument all SurrealDB operations
logfire.instrument_surrealdb()

# All database operations are now automatically traced
async with AsyncSurreal("ws://localhost:8000") as db:
    await db.signin({"username": "root", "password": "root"})
    await db.use("test", "test")
    
    # These operations will appear as spans in your traces
    await db.create("person", {"name": "Alice"})
    await db.query("SELECT * FROM person")

Features

  • Automatic tracing: All database methods are instrumented automatically
  • Smart parameter logging: Sensitive data (tokens, passwords) are automatically scrubbed
  • OpenTelemetry compatible: Works with Jaeger, DataDog, Honeycomb, and other OTel platforms
  • Minimal overhead: Efficient instrumentation with negligible performance impact
  • Works with all connection types: HTTP, WebSocket, and embedded databases

Learn More

For a complete example with configuration options and best practices, see examples/logfire/.

Contributing

Contributions to this library are welcome! If you encounter issues, have feature requests, or want to make improvements, feel free to open issues or submit pull requests.

If you want to contribute to the Github repo please read the general contributing guidelines on concepts such as how to create a pull requests here.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

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

surrealdb-2.0.0.tar.gz (303.7 kB view details)

Uploaded Source

Built Distributions

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

surrealdb-2.0.0-cp39-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

surrealdb-2.0.0-cp39-abi3-musllinux_1_2_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ x86-64

surrealdb-2.0.0-cp39-abi3-musllinux_1_2_aarch64.whl (6.0 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

surrealdb-2.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

surrealdb-2.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.8 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

surrealdb-2.0.0-cp39-abi3-macosx_11_0_arm64.whl (5.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

surrealdb-2.0.0-cp39-abi3-macosx_10_12_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file surrealdb-2.0.0.tar.gz.

File metadata

  • Download URL: surrealdb-2.0.0.tar.gz
  • Upload date:
  • Size: 303.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for surrealdb-2.0.0.tar.gz
Algorithm Hash digest
SHA256 70a2656bf5b6d844cf4c029d6e0a7309ca95b9ba282663f31c8b6e642fc8463a
MD5 96eb6e31158915cf3f4ac2e48cf814f1
BLAKE2b-256 55b3231444479bd065b5d29c151296dd8aa4591f399039ffd39c45d1ea0b3906

See more details on using hashes here.

File details

Details for the file surrealdb-2.0.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: surrealdb-2.0.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.1 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for surrealdb-2.0.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ba43f1156b2a6d00e8e595764505156db2f7fd5d023e189c59e9673fa9949fe8
MD5 3c6f8fd6f32845ef0e53dda22f9d7483
BLAKE2b-256 3c6b522f48258c2f1cefacfe55cb772e14e1c28b4973f63ba5baffc4998e9cc9

See more details on using hashes here.

File details

Details for the file surrealdb-2.0.0-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for surrealdb-2.0.0-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e7163637c813e2e6daec7660c4d83462509c1c77ecb4086bdb3766af6fdfb571
MD5 ed2bb98a5f93661e5fa2652bb97b12f9
BLAKE2b-256 1da4d1259c9437e12bbe8e54416f610b9a4300791e655d8784e51c087394cce8

See more details on using hashes here.

File details

Details for the file surrealdb-2.0.0-cp39-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for surrealdb-2.0.0-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d5dd4df823b407f58077a9dddc4f4bff938e365d091df56d2fe4108e980f8b87
MD5 acaab37c9ac335ae99ca571b53dc6aba
BLAKE2b-256 202e1d02a9c1d6cbeea1dae079320c7baaf89c0d465b204eaeb5fe8a543ee53a

See more details on using hashes here.

File details

Details for the file surrealdb-2.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for surrealdb-2.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1e0d61545611cf86f13825932315e65c79a9f1bfb1c0fe3b40b0e48562b8673c
MD5 0ccbc406175f0c1152120b2d6bccd1ac
BLAKE2b-256 4c55463e429e85e41c0941b3daa878b6005f76fcabaab9a09beab02d2852c4b3

See more details on using hashes here.

File details

Details for the file surrealdb-2.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for surrealdb-2.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e3a4e9c35964af1dc6ce01fe2aa553d6c3fcd0a8bd02c05e38fc88433395ba74
MD5 e73ed33a0fc01191b4d449a660ee335c
BLAKE2b-256 181dd05be5d682b10ac8b2af74f93b374c43109585b7e6be3d9d2b4790960f20

See more details on using hashes here.

File details

Details for the file surrealdb-2.0.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for surrealdb-2.0.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b0b24ea230a53ea6c67c51c8e45332d9383b4b8f42246b64c034a2b26d0cc2a
MD5 4cff6764c28bd31edde7971a11dc714a
BLAKE2b-256 d38c137e6d3e1ff0b2990dcf56c80920e2d64855ffdd16fe8195fa6c5c4adcf9

See more details on using hashes here.

File details

Details for the file surrealdb-2.0.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for surrealdb-2.0.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5ade2dfd53fedd7c7ddb3b102d6223ccefa30ad8a1df1cde261ce8004e97aa2f
MD5 4df341647e41e371de598816adf9d717
BLAKE2b-256 864785b04ef0224cb1538d8b0154a16c222e1e4174016ad3c7833e4b00cc6382

See more details on using hashes here.

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