title: sqlalchemy.orm mapperlib Example Code category: page slug: sqlalchemy-orm-mapperlib-examples sortorder: 500031069 toc: False sidebartitle: sqlalchemy.orm mapperlib meta: Python example code that shows how to use the mapperlib callable from the sqlalchemy.orm module of the SQLAlchemy project. `mapperlib` is a callable within the `sqlalchemy.orm` module of the SQLAlchemy project. ColumnProperty, CompositeProperty, Load, Mapper, Query, RelationshipProperty, Session, SynonymProperty, aliased, attributes, backref, class_mapper, column_property, composite, interfaces, mapper, object_mapper, object_session, query, relationship, session, sessionmaker, and strategies are several other callables with code examples from the same `sqlalchemy.orm` package. ## Example 1 from sqlalchemy-utils [sqlalchemy-utils](https://github.com/kvesteri/sqlalchemy-utils) ([project documentation](https://sqlalchemy-utils.readthedocs.io/en/latest/) and [PyPI package information](https://pypi.org/project/SQLAlchemy-Utils/)) is a code library with various helper functions and new data types that make it easier to use [SQLAlchemy](/sqlalchemy.html) when building projects that involve more specific storage requirements such as [currency](https://sqlalchemy-utils.readthedocs.io/en/latest/data_types.html#module-sqlalchemy_utils.types.currency). The wide array of [data types](https://sqlalchemy-utils.readthedocs.io/en/latest/data_types.html) includes [ranged values](https://sqlalchemy-utils.readthedocs.io/en/latest/range_data_types.html) and [aggregated attributes](https://sqlalchemy-utils.readthedocs.io/en/latest/aggregates.html). [**sqlalchemy-utils / sqlalchemy_utils / functions / orm.py**](https://github.com/kvesteri/sqlalchemy-utils/blob/master/sqlalchemy_utils/functions/orm.py) ```python # orm.py from collections import OrderedDict from functools import partial from inspect import isclass from operator import attrgetter import six import sqlalchemy as sa from sqlalchemy.engine.interfaces import Dialect from sqlalchemy.ext.hybrid import hybrid_property ~~from sqlalchemy.orm import mapperlib from sqlalchemy.orm.attributes import InstrumentedAttribute from sqlalchemy.orm.exc import UnmappedInstanceError from sqlalchemy.orm.properties import ColumnProperty, RelationshipProperty from sqlalchemy.orm.query import _ColumnEntity from sqlalchemy.orm.session import object_session from sqlalchemy.orm.util import AliasedInsp from ..utils import is_sequence def get_class_by_table(base, table, data=None): found_classes = set( c for c in base._decl_class_registry.values() if hasattr(c, '__table__') and c.__table__ is table ) if len(found_classes) > 1: if not data: raise ValueError( "Multiple declarative classes found for table '{0}'. " "Please provide data parameter for this function to be able " "to determine polymorphic scenarios.".format( table.name ) ) ## ... source file abbreviated to get to mapperlib examples ... 'No column %s is configured on mapper %s...' % (column, mapper) ) def get_mapper(mixed): if isinstance(mixed, sa.orm.query._MapperEntity): mixed = mixed.expr elif isinstance(mixed, sa.Column): mixed = mixed.table elif isinstance(mixed, sa.orm.query._ColumnEntity): mixed = mixed.expr if isinstance(mixed, sa.orm.Mapper): return mixed if isinstance(mixed, sa.orm.util.AliasedClass): return sa.inspect(mixed).mapper if isinstance(mixed, sa.sql.selectable.Alias): mixed = mixed.element if isinstance(mixed, AliasedInsp): return mixed.mapper if isinstance(mixed, sa.orm.attributes.InstrumentedAttribute): mixed = mixed.class_ if isinstance(mixed, sa.Table): mappers = [ ~~ mapper for mapper in mapperlib._mapper_registry if mixed in mapper.tables ] if len(mappers) > 1: raise ValueError( "Multiple mappers found for table '%s'." % mixed.name ) elif not mappers: raise ValueError( "Could not get mapper for table '%s'." % mixed.name ) else: return mappers[0] if not isclass(mixed): mixed = type(mixed) return sa.inspect(mixed) def get_bind(obj): if hasattr(obj, 'bind'): conn = obj.bind else: try: conn = object_session(obj).bind except UnmappedInstanceError: ## ... source file continues with no further mapperlib examples... ```