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-10-16},
}
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.11.tar.gz
(11.7 kB
view hashes)
Built Distribution
Close
Hashes for sqlalchemy-mutable-0.0.11.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1029ca0fac8ca35561fcf2a2c819a10b07fa5c0d2edc57e44626baba17b77a25 |
|
MD5 | 8b2754284daa2e0fe76b3c1878180371 |
|
BLAKE2b-256 | 1dfac7773742ff31ae201f4cfa5d1658f2fe702c32a2263a35c56e2b32657541 |
Close
Hashes for sqlalchemy_mutable-0.0.11-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c8b9fdb0e1e4943c55f7c878b2666e9046476631e29bc2e749482b27c106ab73 |
|
MD5 | c7703fd76943f2ff8bc717595ff63b70 |
|
BLAKE2b-256 | 2b974eeda381c3c19d42df9f7387b9074ee244d9527b4970e23f3779123e8eba |