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
- 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
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
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.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a17f84fd90d9022b27998c70f095fb59252774382f247c93b8674a2462d3f8b5
|
|
| MD5 |
9cc849631af79f0626010768ea614f2b
|
|
| BLAKE2b-256 |
1e6d48ce2499ad702ec1607dc5161d677b760eac165f6a261046a44d10d2951e
|
Provenance
The following attestation bundles were made for pyramid_sa-0.1.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.1.0.tar.gz -
Subject digest:
a17f84fd90d9022b27998c70f095fb59252774382f247c93b8674a2462d3f8b5 - Sigstore transparency entry: 1154662846
- Sigstore integration time:
-
Permalink:
tomascorrea/pyramid-sa@b371e20402c56d69356cfacfb35245dd3f8eb14e -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/tomascorrea
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@b371e20402c56d69356cfacfb35245dd3f8eb14e -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a775ab8c2e91c9639a761008cfa2b25ce90805e9899f243f7139834e99194f4c
|
|
| MD5 |
4d11ce75e260774d902d430c6f6c103c
|
|
| BLAKE2b-256 |
69a68e031c6682a55cd21462a373adeba341a503fe4085d0d8abf5fb958f7089
|
Provenance
The following attestation bundles were made for pyramid_sa-0.1.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.1.0-py3-none-any.whl -
Subject digest:
a775ab8c2e91c9639a761008cfa2b25ce90805e9899f243f7139834e99194f4c - Sigstore transparency entry: 1154662849
- Sigstore integration time:
-
Permalink:
tomascorrea/pyramid-sa@b371e20402c56d69356cfacfb35245dd3f8eb14e -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/tomascorrea
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci.yml@b371e20402c56d69356cfacfb35245dd3f8eb14e -
Trigger Event:
release
-
Statement type: