Skip to main content

Pyramid SQLAlchemy Integration

Project description

pyramid-sa

Pyramid SQLAlchemy Integration — a reusable library that wires SQLAlchemy into any Pyramid application.

Installation

pip install pyramid-sa

For test fixtures (dev only):

pip install pyramid-sa-testing

Usage

In your Pyramid app factory:

from pyramid.config import Configurator


def create_app(global_config=None, dbengine=None, **settings):
    config = Configurator(settings=settings)

    if dbengine is not None:
        config.registry["dbengine"] = dbengine

    config.include("pyramid_sa")

    # Import your models so SQLAlchemy knows about them
    import myapp.models  # noqa: F401
    from sqlalchemy.orm import configure_mappers
    configure_mappers()

    config.scan(".views")
    return config.make_wsgi_app()

What config.include("pyramid_sa") does

  1. Includes pyramid_tm (transaction management)
  2. Creates the SQLAlchemy engine from sqlalchemy.url in settings (or uses config.registry["dbengine"] if pre-set)
  3. Registers a session factory and adds request.dbsession as a reified property
  4. Adds an exception tween (NoResultFound → 404, IntegrityError → 409)
  5. Configures a JSON renderer with adapters for datetime, date, and UUID

Base model

All your models should inherit from pyramid_sa.Base:

import uuid

from sqlalchemy import String
from sqlalchemy.orm import Mapped, mapped_column

from pyramid_sa import Base, generate_uuid


class Item(Base):
    __tablename__ = "items"

    id: Mapped[int] = mapped_column(primary_key=True)
    uuid: Mapped[uuid.UUID] = mapped_column(default=generate_uuid, unique=True)
    name: Mapped[str] = mapped_column(String(255))

Base includes an AuditMixin that adds created_at, updated_at, created_by, updated_by, created_ip, updated_ip columns automatically.

Alembic

Create a minimal alembic/env.py in your app:

from alembic import context
from pyramid_sa import Base
from pyramid_sa.scripts.alembic import run_migrations_offline, run_migrations_online

import myapp.models  # noqa: F401

target_metadata = Base.metadata

if context.is_offline_mode():
    run_migrations_offline(target_metadata)
else:
    run_migrations_online(target_metadata)

CLI

Compose the db commands into your app's CLI:

import click
from pyramid_sa.scripts.cli import db


@click.group()
@click.option("--config-uri", default="development.ini", show_default=True)
@click.pass_context
def cli(ctx, config_uri):
    ctx.ensure_object(dict)
    ctx.obj["config_uri"] = config_uri


cli.add_command(db)

Commands: db drop, db initialize (with --drop-before and --run-thru-alembic flags).

Test Fixtures

Install pyramid-sa-testing and the pytest plugin is auto-discovered. It provides:

Fixture Scope Description
pyramid_sa_engine session SQLite in-memory engine (override for PostgreSQL)
pyramid_sa_tm function Doomed transaction manager — auto-rollback after each test
pyramid_sa_dbsession function DB session bound to the test transaction
pyramid_sa_testapp function WebTest TestApp with session injected
pyramid_sa_app_request function Real Pyramid request for service-layer testing

Your conftest.py must provide an app fixture:

import pytest
from pyramid_sa import Base


@pytest.fixture(scope="session")
def app(pyramid_sa_engine):
    from myapp.app import create_app

    wsgi_app = create_app(dbengine=pyramid_sa_engine)
    Base.metadata.create_all(pyramid_sa_engine)
    return wsgi_app

Development

uv sync --dev
uv run pytest
uv run ruff check .
uv run black .

License

MIT

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

pyramid_sa-0.1.0.tar.gz (62.7 kB view details)

Uploaded Source

Built Distribution

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

pyramid_sa-0.1.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file pyramid_sa-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for pyramid_sa-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a17f84fd90d9022b27998c70f095fb59252774382f247c93b8674a2462d3f8b5
MD5 9cc849631af79f0626010768ea614f2b
BLAKE2b-256 1e6d48ce2499ad702ec1607dc5161d677b760eac165f6a261046a44d10d2951e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyramid_sa-0.1.0.tar.gz:

Publisher: ci.yml on tomascorrea/pyramid-sa

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

File details

Details for the file pyramid_sa-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyramid_sa-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyramid_sa-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a775ab8c2e91c9639a761008cfa2b25ce90805e9899f243f7139834e99194f4c
MD5 4d11ce75e260774d902d430c6f6c103c
BLAKE2b-256 69a68e031c6682a55cd21462a373adeba341a503fe4085d0d8abf5fb958f7089

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyramid_sa-0.1.0-py3-none-any.whl:

Publisher: ci.yml on tomascorrea/pyramid-sa

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