Data Module Overview
info
The Data module provides data access, persistence, and query capabilities with support for multiple database backends.
Introduction
The Data module abstracts data access and provides:
- Data Drivers: Support for SQLAlchemy, MongoDB, and in-memory storage
- Data Models: Pydantic-based models with validation
- Data Schemas: SQLAlchemy schema definitions
- Query Building: Type-safe query construction
- Serialization: JSON encoding/decoding with custom encoders
Key Components
DataModel
DataModel is the base class for all data models:
from fluvius.data import DataModel, field
class User(DataModel):
name: str = field()
email: str = field()
active: bool = field(initial=True)
DataDriver
Data drivers provide database-specific implementations:
from fluvius.data import SqlaDriver
driver = SqlaDriver(connection_string='postgresql://...')
DataManager
The Data Manager provides high-level data access:
from fluvius.data import DataAccessManager
manager = DataAccessManager(driver)
# Fetch entity
user = await manager.fetch('user', user_id)
# Find entities
users = await manager.find('user', active=True)
# Save entity
await manager.save('user', user_id, user_data)
DataSchema
Schemas define database table structures:
from fluvius.data import SqlaDataSchema
from sqlalchemy import Column, String, Boolean
class UserSchema(SqlaDataSchema):
__tablename__ = 'users'
name = Column(String)
email = Column(String)
active = Column(Boolean, default=True)
Supported Backends
SQLAlchemy (PostgreSQL, SQLite, MySQL)
from fluvius.data import SqlaDriver
driver = SqlaDriver(
connection_string='postgresql://user:pass@localhost/db'
)
MongoDB
from fluvius.data.data_driver.mongodb import MongoDriver
driver = MongoDriver(
connection_string='mongodb://localhost:27017/'
)
In-Memory
from fluvius.data.data_driver.memory import MemoryDriver
driver = MemoryDriver()
Query Building
Build type-safe queries:
from fluvius.data import BackendQuery
query = BackendQuery('user').filter(active=True).limit(10)
results = await manager.query(query)
Serialization
Custom JSON encoding for complex types:
from fluvius.data import JSONEncoder, serialize_json
data = {'user_id': UUID_GENR(), 'timestamp': datetime.now()}
json_str = serialize_json(data, encoder=JSONEncoder)
Next Steps
- Read the Data Module API Reference
- Learn about Query Building
- Check out Examples