Setup

All examples in the documentation assume you have run the following setup code for SQLAlchemy or Flask-SQLAlchemy.

SQLAlchemy

from sqlalchemy_mutable import Mutable, MutableType, MutableModelBase, Query

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base

# create a session (standard)
engine = create_engine('sqlite:///:memory:')
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
session = Session()
Base = declarative_base()

# subclass `MutableModelBase` when creating database models 
# which may be stored in a `Mutable` object
class MyModel(MutableModelBase, Base):
    __tablename__ = 'mymodel'
    id = Column(Integer, primary_key=True)
    greeting = Column(String)

    # initialize a database column with `MutableType`
    mutable = Column(MutableType) 
    # add a `query` class attribute initialized with a scoped_session
    # not necessary for use with Flask-SQLAlchemy
    query = Query(Session) 

    def __init__(self):
        # set mutable column to `Mutable` object
        self.mutable = Mutable()

# create the database (standard)
Base.metadata.create_all(engine)

Flask-SQLAlchemy

from sqlalchemy_mutable import Mutable, MutableType, MutableModelBase

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# create a session (standard)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# subclass `MutableModelBase` when creating database models
class MyModel(MutableModelBase, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    greeting = db.Column(db.String)

    # initialize a database column with `MutableType`
    mutable = db.Column(MutableType)  

    def __init__(self):
        # set mutable column to `Mutable` object
        self.mutable = Mutable()

# create the database (standard)
db.create_all()
session = db.session