Fields¶
QuantumEngine provides a comprehensive set of field types for defining document schemas. These fields handle validation, serialization, and backend-specific transformations.
Overview¶
Fields in QuantumEngine serve multiple purposes:
Type validation: Ensure data conforms to expected types
Default values: Provide sensible defaults for missing data
Required validation: Enforce mandatory fields
Custom validation: Apply business logic rules
Backend adaptation: Translate between Python types and database-specific formats
Basic Usage¶
Fields are typically used as class attributes in document definitions:
from quantumengine import Document
from quantumengine.fields import StringField, IntField, DateTimeField
class User(Document):
name = StringField(required=True)
age = IntField(default=0)
created_at = DateTimeField(auto_now_add=True)
Field Categories¶
Scalar Fields¶
Basic data types for simple values:
StringField
- Text dataIntField
- Integer numbersFloatField
- Floating-point numbersBooleanField
- True/False valuesDecimalField
- Precise decimal numbers
DateTime Fields¶
Temporal data handling:
DateTimeField
- Date and time valuesTimeSeriesField
- Time series dataDurationField
- Time duration values
Collection Fields¶
Container types for multiple values:
Reference Fields¶
Relationships between documents:
ReferenceField
- Document referencesRelationField
- Graph-style relations (SurrealDB)
Specialized Fields¶
Domain-specific field types:
EmailField
- Email addressesURLField
- Web URLsUUIDField
- UUID valuesIPAddressField
- IP addressesSlugField
- URL-friendly stringsChoiceField
- Enumerated choicesRegexField
- Regex-validated strings
ClickHouse-Specific Fields¶
Optimized fields for ClickHouse backend:
LowCardinalityField
- Low cardinality optimizationFixedStringField
- Fixed-length stringsArrayField
- Native array supportCompressedStringField
- Compressed text data
Common Field Options¶
All fields support these common parameters:
Parameter |
Description |
---|---|
|
Whether the field must have a value (default: |
|
Default value or callable that returns a default |
|
Override the database field name |
|
Enforce uniqueness constraint |
|
Restrict values to a predefined set |
|
Custom validation function or list of functions |
Validation¶
Fields provide multiple levels of validation:
Type Validation¶
Automatic type checking based on field class:
age = IntField() # Only accepts integers
name = StringField() # Only accepts strings
Custom Validators¶
Add custom validation logic:
def validate_age(value):
if value < 0 or value > 150:
raise ValidationError("Age must be between 0 and 150")
age = IntField(validation=validate_age)
Required Fields¶
Enforce mandatory fields:
email = EmailField(required=True) # Must be provided
Backend Considerations¶
Different backends may handle fields differently:
SurrealDB¶
Supports all field types including relations
Handles complex nested structures
Native support for geometric data
ClickHouse¶
Optimized for analytical workloads
Special fields for compression and low cardinality
No support for document references
Examples¶
Basic Document¶
from quantumengine import Document
from quantumengine.fields import *
class Product(Document):
name = StringField(required=True)
price = DecimalField(required=True)
description = StringField()
tags = ListField(StringField())
in_stock = BooleanField(default=True)
created_at = DateTimeField(auto_now_add=True)
With Validation¶
class User(Document):
username = StringField(required=True, unique=True)
email = EmailField(required=True)
age = IntField(validation=lambda v: v >= 18)
role = ChoiceField(choices=['admin', 'user', 'guest'])
ClickHouse Analytics¶
class Event(Document):
__backend__ = 'clickhouse'
event_type = LowCardinalityField(StringField())
timestamp = DateTimeField(required=True)
user_id = UUIDField()
properties = DictField()
tags = ArrayField(StringField())
See Also¶
Fields API - Complete API reference
Tutorial - Getting started guide
/backends - Backend-specific features