{"library":"sqlalchemy-continuum","title":"SQLAlchemy-Continuum","type":"library","description":"SQLAlchemy-Continuum is a versioning and auditing extension for SQLAlchemy. It automatically creates versions for inserts, deletes, and updates of SQLAlchemy models, supports Alembic migrations, and allows reverting objects and their relations to previous states. The current version, 1.6.0, was released in January 2026, indicating an active development and maintenance cadence with recent updates for Python 3.13/3.14 and SQLAlchemy 2.0 compatibility.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install SQLAlchemy-Continuum"],"cli":null},"imports":["from sqlalchemy_continuum import make_versioned","from sqlalchemy_continuum import version_class","from sqlalchemy_continuum import parent_class"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/kvesteri/sqlalchemy-continuum","docs":null,"changelog":null,"pypi":"https://pypi.org/project/sqlalchemy-continuum/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"import sqlalchemy as sa\nfrom sqlalchemy import create_engine, Column, Integer, Unicode, UnicodeText\nfrom sqlalchemy.orm import sessionmaker, declarative_base, configure_mappers\nfrom sqlalchemy_continuum import make_versioned, version_class\n\n# Call make_versioned() before defining models\nmake_versioned(user_cls=None)\n\nBase = declarative_base()\n\nclass Article(Base):\n    __tablename__ = 'article'\n    __versioned__ = {}\n    id = Column(Integer, primary_key=True, autoincrement=True)\n    name = Column(Unicode(255))\n    content = Column(UnicodeText)\n\n    def __repr__(self):\n        return f\"Article(id={self.id}, name='{self.name}')\"\n\n# After defining all models, call configure_mappers\nconfigure_mappers()\n\n# Setup database and session\nengine = create_engine('sqlite:///:memory:')\nBase.metadata.create_all(engine)\nSession = sessionmaker(bind=engine)\nsession = Session()\n\n# Create an article\narticle = Article(name='Initial Name', content='Initial Content')\nsession.add(article)\nsession.commit()\nprint(f\"Created: {article}\")\n\n# Update the article\narticle.name = 'Updated Name'\nsession.commit()\nprint(f\"Updated: {article}\")\n\n# Access versions\nArticleVersion = version_class(Article)\nversions = session.query(ArticleVersion).filter_by(id=article.id).order_by(ArticleVersion.transaction_id).all()\n\nprint(f\"\\nAll versions for Article {article.id}:\")\nfor v in versions:\n    print(f\"- Version (tx_id={v.transaction_id}): name='{v.name}'\")\n\n# Revert to the first version\nif versions:\n    first_version = versions[0]\n    first_version.revert()\n    session.commit()\n    print(f\"\\nReverted to first version. Current article name: {article.name}\")\n\nsession.close()\n","lang":"python","description":"This quickstart demonstrates how to enable versioning for a SQLAlchemy model. It involves calling `make_versioned()` before model definitions, adding `__versioned__ = {}` to desired models, and then calling `configure_mappers()` after all models are defined. It then shows how to create, update, and retrieve historical versions of an object, including reverting to a previous state.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"1.6.0","pypi_latest":"1.6.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.2,"avg_import_s":0.94,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.83,"mem_mb":23.5,"disk_size":"43.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.6,"mem_mb":23.5,"disk_size":"41M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.14,"mem_mb":26.3,"disk_size":"48.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":1.02,"mem_mb":26.3,"disk_size":"47M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.15,"mem_mb":26,"disk_size":"39.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1.13,"mem_mb":26,"disk_size":"38M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.14,"mem_mb":25.8,"disk_size":"38.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1.04,"mem_mb":25.8,"disk_size":"37M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.71,"mem_mb":23.4,"disk_size":"41.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"SQLAlchemy-Continuum","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.9,"import_time_s":0.68,"mem_mb":23.4,"disk_size":"41M"}]}}