Skip to main content

Versioning and auditing extension for SQLAlchemy.

Project description

Build Status Version Status Downloads

Versioning and auditing extension for SQLAlchemy.

Features

  • 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

  • Temporal relationship reflection. Version object’s relationship show the parent objects relationships as they where in that point in time.

  • Supports native versioning for PostgreSQL database (trigger based versioning)

QuickStart

pip install SQLAlchemy-Continuum

In order to make your models versioned you need two things:

  1. Call make_versioned() before your models are defined.

  2. Add __versioned__ to all models you wish to add versioning to

from sqlalchemy_continuum import make_versioned


make_versioned(user_cls=None)


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='Some article', content='Some content')
session.add(article)
session.commit()

# article has now one version stored in database
article.versions[0].name
# 'Some article'

article.name = 'Updated name'
session.commit()

article.versions[1].name
# 'Updated name'


# lets revert back to first version
article.versions[0].revert()

article.name
# 'Some article'

For completeness, below is a working example.

from sqlalchemy_continuum import make_versioned
from sqlalchemy import Column, Integer, Unicode, UnicodeText, create_engine
from sqlalchemy.orm import create_session, configure_mappers, declarative_base

make_versioned(user_cls=None)

Base = declarative_base()
class Article(Base):
    __versioned__ = {}
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(Unicode(255))
    content = Column(UnicodeText)

configure_mappers()
engine = create_engine('sqlite://')
Base.metadata.create_all(engine)
session = create_session(bind=engine, autocommit=False)

article = Article(name=u'Some article', content=u'Some content')
session.add(article)
session.commit()
article.versions[0].name
article.name = u'Updated name'
session.commit()
article.versions[1].name
article.versions[0].revert()
article.name

Resources

http://i.imgur.com/UFaRx.gif

More information

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_continuum-1.5.2.tar.gz (86.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqlalchemy_continuum-1.5.2-py3-none-any.whl (51.5 kB view details)

Uploaded Python 3

File details

Details for the file sqlalchemy_continuum-1.5.2.tar.gz.

File metadata

File hashes

Hashes for sqlalchemy_continuum-1.5.2.tar.gz
Algorithm Hash digest
SHA256 2571d6eb6156bc8562afb392fdddeb4bb31e44a1fd1f3788cb625efe2f696c63
MD5 162d554d34467cb68eda977a7bf9f82d
BLAKE2b-256 91c6c7e16867ceafc0f576ec61a901b300b238b4e6a17e7e7725ca9c00be9584

See more details on using hashes here.

File details

Details for the file sqlalchemy_continuum-1.5.2-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlalchemy_continuum-1.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 978e525401089a7ccc96eed184bb4b362c25191e2562008ccc43adcc405ba346
MD5 3143b4c8e49bd1fc2f369825b9d9ceba
BLAKE2b-256 a85e9b3bd523c649813987bfba8a24622161da094ab3fb4dd6dc2a7936166de8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page