Versioning and auditing extension for SQLAlchemy.
- Creates versions for inserts, deletes and updates
- Does not store updates which don't change anything
- Supports alembic migrations
- Can revert objects data as well as all object relations at given transaction even if the object was deleted
- Transactions can be queried afterwards using SQLAlchemy query syntax
- Query for changed records at given transaction
pip install SQLAlchemy-Continuum
In order to make your models versioned you need two things:
- Call make_versioned() before your models are defined.
- Add __versioned__ to all models you wish to add versioning to
from sqlalchemy_continuum import make_versioned
make_versioned()
class Article(Base):
__versioned__ = {}
__tablename__ = 'article'
id = sa.Column(sa.Integer, primary_key=True, autoincrement=True)
name = sa.Column(sa.Unicode(255))
content = sa.Column(sa.UnicodeText)
article = Article(name=u'Some article', content=u'Some content')
session.add(article)
session.commit()
# article has now one version stored in database
article.versions[0].name
# u'Some article'
article.name = u'Updated name'
session.commit()
article.versions[1].name
# u'Updated name'
# lets revert back to first version
article.versions[0].revert()
article.name
# u'Some article'