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")
config.sa_scan_models("myapp.models")
config.scan(".views")
return config.make_wsgi_app()
sa_scan_models accepts one or more dotted module paths. It imports each module (registering models with Base) and calls configure_mappers() so all relationships are resolved.
What config.include("pyramid_sa") does
- Includes
pyramid_tm(transaction management) - Creates the SQLAlchemy engine from
sqlalchemy.urlin settings (or usesconfig.registry["dbengine"]if pre-set) - Registers a session factory and adds
request.dbsessionas a reified property - Adds an exception tween (
NoResultFound→ 404,IntegrityError→ 409) - Configures a JSON renderer with adapters for
datetime,date, andUUID - Registers the
sa_scan_modelsdirective on the Configurator
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
Scaffold alembic in your project with a single command:
db init-alembic
This creates alembic.ini, alembic/env.py, alembic/script.py.mako, and alembic/versions/ in the current directory, pre-wired with pyramid-sa helpers. Then edit alembic/env.py to import your models:
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)
Migration versions live in your app (alembic/versions/), never in the library.
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 init-alembic— scaffold alembic in the current directory (--forceto overwrite)db drop— drop all database tablesdb initialize— create schema (--drop-before,--run-thru-alembicflags)
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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyramid_sa-0.5.0.tar.gz.
File metadata
- Download URL: pyramid_sa-0.5.0.tar.gz
- Upload date:
- Size: 80.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36ac4d17dd52d13de5b75d93ce695d1858ae6a21c27b9a10517c6cb4c4e85b3c
|
|
| MD5 |
d49bbe776f17ff5bbeb3cfd4c0adacd3
|
|
| BLAKE2b-256 |
7197f3a677dfcb4db5257ed79c2bbd5b7c4231d2c004b507646dd4bb56b45b0b
|
Provenance
The following attestation bundles were made for pyramid_sa-0.5.0.tar.gz:
Publisher:
ci.yml on tomascorrea/pyramid-sa
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyramid_sa-0.5.0.tar.gz -
Subject digest:
36ac4d17dd52d13de5b75d93ce695d1858ae6a21c27b9a10517c6cb4c4e85b3c - Sigstore transparency entry: 1154874497
- Sigstore integration time:
-
Permalink:
tomascorrea/pyramid-sa@fd95383c27b0b62938825f5d9f4e9f646beea036 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/tomascorrea
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@fd95383c27b0b62938825f5d9f4e9f646beea036 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pyramid_sa-0.5.0-py3-none-any.whl.
File metadata
- Download URL: pyramid_sa-0.5.0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bfc891547a11597c0abdf06c4fe9867290fb687cd8dfc093efd329004da7e5c5
|
|
| MD5 |
b3bf3db6627dbd481dd42fdd6225ba79
|
|
| BLAKE2b-256 |
3b30fd0d2af405f6abc6d52bed12f8559c37ea910aa856e3142617d87e9dd038
|
Provenance
The following attestation bundles were made for pyramid_sa-0.5.0-py3-none-any.whl:
Publisher:
ci.yml on tomascorrea/pyramid-sa
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyramid_sa-0.5.0-py3-none-any.whl -
Subject digest:
bfc891547a11597c0abdf06c4fe9867290fb687cd8dfc093efd329004da7e5c5 - Sigstore transparency entry: 1154874501
- Sigstore integration time:
-
Permalink:
tomascorrea/pyramid-sa@fd95383c27b0b62938825f5d9f4e9f646beea036 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/tomascorrea
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@fd95383c27b0b62938825f5d9f4e9f646beea036 -
Trigger Event:
release
-
Statement type: