Skip to main content

Use SQLAlchemy in a Pythonic way.

Project description

sqlalchemy-crud-tx

English | 中文

A lightweight CRUD + transaction helper for SQLAlchemy (Flask glue can be added via extensions):

  • Context-managed CRUD with nested savepoints: with CRUD(Model) as crud:
  • Function-level transactions via @CRUD.transaction() with join semantics
  • Configurable error policy (error_policy="raise"|"status_only") and pluggable logger
  • Type-friendly CRUDQuery wrapper for common chainable operations

Install

pip install sqlalchemy-crud-tx
# with Flask integration
pip install "sqlalchemy-crud-tx[flask]"
# or local editable install
pip install -e .

Requires Python 3.11+ with sqlalchemy>=1.4 (optional Flask integration can be added separately).

Quick Start (pure SQLAlchemy)

from sqlalchemy import String, Integer, create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, sessionmaker
from sqlalchemy_crud_tx import CRUD

engine = create_engine("sqlite:///./crud_example.db", echo=False)
SessionLocal = sessionmaker(bind=engine, expire_on_commit=False)


class Base(DeclarativeBase):
    pass


class User(Base):
    __tablename__ = "example_user"
    id: Mapped[int] = mapped_column(Integer, primary_key=True)
    email: Mapped[str] = mapped_column(String(255), unique=True, nullable=False)


Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)

CRUD.configure(session_provider=SessionLocal, error_policy="raise")

with CRUD(User) as crud:
    user = crud.add(email="demo@example.com")
    print("created", user)

with CRUD(User, email="demo@example.com") as crud:
    row = crud.first()
    print("fetched", row)

with CRUD(User) as crud:
    crud.delete(row)
# or
with CRUD(User, email="demo@example.com") as crud:
    crud.delete()

Function-Level Transactions

from sqlalchemy_crud_tx import CRUD

CRUD.configure(session_provider=SessionLocal, error_policy="raise")

@CRUD.transaction(error_policy="raise")
def create_two_users():
    with CRUD(User) as crud1:
        crud1.add(email="a@example.com")
    with CRUD(User) as crud2:
        crud2.add(email="b@example.com")

create_two_users()
  • The outermost call commits or rolls back; inner CRUD contexts only mark status when exceptions occur.
  • With error_policy="status_only", SQLAlchemyError is rolled back and caught; check crud.status / crud.error instead.

Docs & Examples

  • Full example: docs/examples/basic_crud.py
  • Transaction refactor notes/TODO: docs/crud_refactor_todo.md
  • Typing directions: docs/todo.md

Testing

  1. Provide a DB URI via env or .env: TEST_DB=sqlite:///./test.db (or another driver).
  2. Install test deps, then:
    pytest -q
    

Notes

  • SQLAlchemy-first; optional Flask integration can be layered via extensions.
  • Always call CRUD.configure(session_provider=...) before using CRUD instances.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlalchemy_crud_tx-0.2.0.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

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

sqlalchemy_crud_tx-0.2.0-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

File details

Details for the file sqlalchemy_crud_tx-0.2.0.tar.gz.

File metadata

  • Download URL: sqlalchemy_crud_tx-0.2.0.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sqlalchemy_crud_tx-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d9a09330d1a298f64ce6167803f6ccd706942cb371cbe848810e14502b1e027c
MD5 002d3b004cb553737ba0b18ed60025d2
BLAKE2b-256 6197d75783c132cd1c02b8b1af16ca9bd8c585c3e967d1bae250a9bba5c579df

See more details on using hashes here.

Provenance

The following attestation bundles were made for sqlalchemy_crud_tx-0.2.0.tar.gz:

Publisher: publish-pypi.yml on ZM-Kimu/sqlalchemy-crud-tx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sqlalchemy_crud_tx-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlalchemy_crud_tx-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c58492d599b8c2d6071fe9c5492a06189479b204649cf02a532d6fe157e62ac3
MD5 ec2a4b20fd83ef28c889aeb229fdb65e
BLAKE2b-256 7885530e5afc663ab9a8efd00bdeb172593bc957d10165137f2f65f5b6632766

See more details on using hashes here.

Provenance

The following attestation bundles were made for sqlalchemy_crud_tx-0.2.0-py3-none-any.whl:

Publisher: publish-pypi.yml on ZM-Kimu/sqlalchemy-crud-tx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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