A powerful and flexible SQLAlchemy database type for nested mutation tracking
Project description
SQLAlchemy-Mutable aspires to be the most powerful and flexible SQLAlchemy database column type.
Its features include:
- Nested mutation tracking
- Mutation tracking for
list
anddict
- Support for storing database models in mutable columns
- Support for common literals and
datetime
objects - Support for custom mutable classes
- Support for converting existing classes to mutable classes
Installation
$ pip install sqlalchemy-mutable
Quickstart
Setup:
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)
Examples:
model = MyModel()
session.add(model)
session.commit()
# nested mutable objects
model.mutable.nested_mutable = Mutable()
session.commit()
model.mutable.nested_mutable.greet = 'hello world'
session.commit()
print(model.mutable.nested_mutable.greet)
# nested mutable list and dict
model.mutable = {}
session.commit()
model.mutable['greet'] = ['hello world']
session.commit()
print(model.mutable)
# storing database models
model.mutable = model
session.commit()
print(model.mutable)
# common literals
model.mutable = 'hello world'
session.commit()
print(model.mutable)
Out:
hello world
{'greet': ['hello world']}
<__main__.MyModel object at 0x7fe54a2d7b00>
hello world
Citation
@software{bowen2020sqlalchemy-mutable,
author = {Dillon Bowen},
title = {SQLAlchemy-Mutable},
url = {https://dsbowen.github.io/sqlalchemy-mutable/},
date = {2020-06-09},
}
License
Users must cite this package in any publications which use it.
It is licensed with the MIT License.
Acknowledgments
Original inspiration drawn from SQLAlchemy-JSON.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sqlalchemy-mutable-0.0.8.tar.gz
(10.0 kB
view hashes)
Built Distribution
Close
Hashes for sqlalchemy_mutable-0.0.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 466a39f9c6099d488ed0b90aac6f6dfa3360eb56e08cbd0563fba5f145ea6e13 |
|
MD5 | 87080a9839383210c77b6b79863aef77 |
|
BLAKE2b-256 | 2c2a52c03db1d0a4957f4885c00bd55930a69e5bbe824e342e6981c0b1cfe78a |