Schema Management

SurrealEngine provides tools for managing database schemas, creating tables, indexes, and handling migrations.

For complete examples, see: example_scripts/schema_management_example.py

Creating Tables

from surrealengine import Document, StringField

class User(Document):
    name = StringField(required=True)

    class Meta:
        collection = "users"
        schemafull = True

# Create table
await User.create_table()

# Create table (sync)
User.create_table_sync()

Automatic Table Creation

Create all tables from a module:

from surrealengine import create_tables_from_module
import models

# Create all document tables
await create_tables_from_module(models, schemafull=True)

Managing Indexes

Define indexes in Meta class:

class User(Document):
    email = StringField(required=True)
    username = StringField(required=True)

    class Meta:
        collection = "users"
        indexes = [
            {"name": "email_idx", "fields": ["email"], "unique": True},
            {"name": "username_idx", "fields": ["username"], "unique": True}
        ]

# Create indexes
await User.create_indexes()

Schema Migrations

Basic migration workflow:

# 1. Update your document models
class User(Document):
    # Add new field
    phone = StringField()

    class Meta:
        collection = "users"

# 2. Create/update table
await User.create_table()

Schemafull vs Schemaless

# Schemafull - enforces schema
class User(Document):
    class Meta:
        schemafull = True

# Schemaless - flexible schema
class User(Document):
    class Meta:
        schemafull = False

For more details, see example_scripts/schema_management_example.py