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.6.0.tar.gz (94.0 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.6.0-py3-none-any.whl (54.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sqlalchemy_continuum-1.6.0.tar.gz
  • Upload date:
  • Size: 94.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for sqlalchemy_continuum-1.6.0.tar.gz
Algorithm Hash digest
SHA256 4be2b66c5b951fdccf38da5b45c56f64f45b7656fe69f56310bf723548f612fc
MD5 8f8d6b31872a8330bafdb4d03fd38eec
BLAKE2b-256 ca950a5c5cb544804e0be6a32a63ba3204b54877f50999cca03179a8eaa82b31

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sqlalchemy_continuum-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 54.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for sqlalchemy_continuum-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8768a402146f5a71b5b86dc4157c72b10ca86e2eecaf5e575c77c3d0811e6768
MD5 e9258742ac20622850942bf3d07edef4
BLAKE2b-256 776e6818134ff199b9b08d92f79ddde6667e19ab835ef2d0732631935d6a7041

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