Skip to main content

pyramid_basemodel - a thin, low level SQLAlchemy bindings to pyramid

Project description


pyramid_basemodel is a thin, low level package that provides an SQLAlchemy declarative Base and a thread local scoped Session that can be used by different packages whilst only needing to be bound to a db engine once.


You can use these as base classes for declarative model definitions, e.g.::

from pyramid_basemodel import Base, BaseMixin, Session, save

class MyModel(Base, BaseMixin):
    """Example model class."""
    def do_foo(cls):
        instance = Session.query(cls).first()

You can then bind these to the sqlalchemy.url in your paster .ini config by importing your model and this package, e.g.:

# for example in
import mymodel

def main(global_config, **settings):
    config = Configurator(settings=settings)
    return config.make_wsgi_app()

Or if this is all too much voodoo, you can just use the bind_engine function::

from pyramid_basemodel import bind_engine
from mypackage import mymodel

# assuming `engine` is a bound SQLAlchemy engine.

Note that the Session is designed to be used in tandem with pyramid_tm. If you don't include pyramid_tm, you'll need to take care of committing transactions yourself.


To run the tests use:

py.test -v --cov pyramid_basemodel tests/



  • [package] Marked python 3.10 compatible (Trove Classifiers)


  • [simplify] Removed inspect and to_slug from BaseSlugNameMixin.set_slug method. These parameters seemd like a way to override some core functionality, which seems like a rare enough case to not maintain it, especially without tests.
  • [simplify] Removed named_tempfile_cls from Blob.get_as_named_tempfile as it wasn't used.
  • [simplify] Simplified the Blob.update_from_url. Now the method accepts only url parameter and does exactly one thing.
  • [code] Use default arguments instead of compose sections.


  • [enhancement] Switch slugify to python-slugify as the latter is python3 compatible
  • [enhancement] As far as existing tests are concerned, now there's both full compatibility and feature parity between python 2 and python 3
  • [CI] use CI


Fix support for zope.sqlalchemy >= 1.2


Remove stray print statements.


Bump to remove src/*.egg-info directory from PyPI distribution.


Make engine kwargs configurable.


Introduce the basemodel.should_bind_engine config flag, which can be used, e.g.: in ftests, to disable the automatic engine setup, even when application code config.include('pyramid_basemodel')s.

Defaults to True!


Default basemodel.should_create_all to False. This will break apps that rely on tables being created by default. However, it's much saner to only invoke both metadata.create_all(engine) and metadata.drop_all(engine) when explicitly told to, particularly as most applications will use migrations to manage the database schema.

0.2.4 -> 0.2.6

Faff about horribly with the slug generation code.


Fix Python3 KeyError syntax bug.


Support dotted path sqlalchemy.pool_class configuration.


Provide util.get_object_id function and stamp sqlalchemy.ext.declarative.declarative_base() subclasses with the interfaces.IDeclarativeBase interface.


Fix Python3 support (requires 3.3 for the unicode literal character).


Allow concrete subclasses of BaseModelContainer to be provided in the tree.BaseContentRoot.mapping (as well as interfaces).


Added a pyramid_basemodel.blob.Blob model class to store large binary files.

Fixed up .slug module doctests. Fix ``install_requireslist`.


Base the BaseMixin.class_name on a singularised version of the plural class name. This may seem a bit arse about face, but allows us to use the tablename to split the word, e.g.:

>>> class OperatingScale(Base, BaseMixin):
...     __tablename__ 'operating_scales'

>>> OperatingScale.class_name
'Operating Scale'

Just ignore all this if you don't plan on using the class_name, class_slug and plural_class_name properties.


Provide BaseMixin.class_slug and base it and the BaseMixin.plural_class_name on the cls.__tablename__ instead of the cls.__name__.

All still manually overrideable by providing the corresponding property with a single underscore, e.g.: cls._plural_class_name.


Provide BaseMixin.class_name and BaseMixin.plural_class_name.


Bugfix to parse config options properly.


Added basemodel.should_create_all configuration option.

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_basemodel-0.5.1.tar.gz (16.0 kB view hashes)

Uploaded source

Built Distribution

pyramid_basemodel-0.5.1-py2.py3-none-any.whl (15.6 kB view hashes)

Uploaded py2 py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page