ORM – object relational mapping¶
sf – ORM session factory¶
Module sf defines SessionFactory class which is central
point for your ORM mapping and SQL database access providing connections
to database.
-
class
summer.sf.SessionProvider[source]¶ Bases:
objectClass to be used as based for providing SqlAlchemy session.
See default implementation in
summer.sf.DefaultSessionProvider.-
property
engine¶ Get SqlAlchemy engine implementation.
- Returns
SqlAlchemy engine implementation
- Return type
sqlalchemy.engine.Engine
-
property
metadata¶ Get SqlAlchemy metadata.
- Returns
SqlAlchemy metadata
- Return type
sqlalchemy.Metadata
-
property
sessionmaker¶ Get SqlAlchemy session factory class.
- Returns
SqlAlchemy session factory class
- Return type
sqlalchemy.orm.sessionmaker
-
property
declarative_base_class¶ Get SqlAlchemy declarative_base type. Mixing classical and declarative approaches is possible, if declarative_base type uses the same metadata and engine with classical approach. Creating single instance of single
summer.sf.SessionProviderensures it is the same.- Returns
SqlAlchemy declarative_base type to be used as base class for entities.
- Return type
type
-
__weakref__¶ list of weak references to the object (if defined)
-
property
-
class
summer.sf.DefaultSessionProvider(uri: str, autocommit: bool = False, **engine_kwargs)[source]¶ Bases:
summer.sf.SessionProviderDefault implementation of
summer.sf.SessionProvider. Provides access to SqlAlchemy internal objectssession.See default implementation in
summer.sf.DefaultSessionProvider.-
__init__(uri: str, autocommit: bool = False, **engine_kwargs)[source]¶ - Parameters
uri (str) – SqlAlchemy’s uri (ie. connection string)
autocommit (bool) – SqlAlchemy’s autocommit
pool_recycle (int) – SqlAlchemy’s pool recycling timeout
-
property
engine¶ Get SqlAlchemy engine implementation.
- Returns
SqlAlchemy engine implementation
- Return type
sqlalchemy.engine.Engine
-
property
metadata¶ Get SqlAlchemy metadata.
- Returns
SqlAlchemy metadata
- Return type
sqlalchemy.Metadata
-
property
sessionmaker¶ Get SqlAlchemy session factory class.
- Returns
SqlAlchemy session factory class
- Return type
sqlalchemy.orm.sessionmaker
-
property
declarative_base_class¶ Get SqlAlchemy declarative_base type. Mixing classical and declarative approaches is possible, if declarative_base type uses the same metadata and engine with classical approach. Creating single instance of single
summer.sf.SessionProviderensures it is the same.- Returns
SqlAlchemy declarative_base type to be used as base class for entities.
- Return type
type
-
-
class
summer.sf.SessionFactory(session_provider: summer.sf.SessionProvider)[source]¶ Bases:
objectThread safe SqlAlchemy session provider.
-
class
Local(engine: sqlalchemy.engine.base.Engine, sessionmaker: sqlalchemy.orm.session.sessionmaker)[source]¶ Bases:
_thread._localThread local session & connection wrapper.
-
__init__(engine: sqlalchemy.engine.base.Engine, sessionmaker: sqlalchemy.orm.session.sessionmaker)[source]¶ Initialize self. See help(type(self)) for accurate signature.
-
property
sqlalchemy_session¶ Get current SqlAlchemy session.
- Returns
existing of just created SqlAlchemy session.
- Return type
sqlalchemy.orm.Session
-
property
autocommit¶ Delegates to
sqlalchemy_session.autocommit().
-
property
connection¶ Use
connection.connectionto obtain Python DB API connection.- Returns
current thread-bound SqlAclhemy connection object corresponding to current session’s transactional state.
- Return type
sqlalchemy.engine.Connection
-
property
active¶ Get status of current SqlAlchemy transaction.
- Returns
True if transaction is in progress, False otherwise.
- Return type
bool
-
-
__init__(session_provider: summer.sf.SessionProvider)[source]¶ Creates
SessionFactoryinstance.- Parameters
uri (str) – SqlAlchemy connection string (including username and password)
-
property
table_definitions¶ Get current table definitions.
- Returns
current
TableDefinitionsinstance- Return type
TableDefinitions
-
property
class_mappings¶ Get current class mappings.
- Returns
current
ClassMappingsinstance- Return type
ClassMappings
-
property
session¶ Get current thread-local SqlAlchemy session wrapper (creating one, if non-exististent).
- Returns
existing or just created SqlAlchemy session wrapper
- Return type
-
property
sqlalchemy_session¶ Delegates to
SessionFactory.Local.sqlalchemy_session().
-
property
connection¶ Delegates to
SessionFactory.Local.connection().
-
property
dialect¶ Get SqlAlchemy dialect.
- Returns
current SqlAlchemy dialect
- Return type
sqlalchemy.engine.Dialect
-
property
sqlite_dialect¶ SQLite is great database for testing or local access, but not designed for multi-threaded/-process applications. Sometimes it is handy to know you are using it to bypass its limitations.
- Returns
True if running over sqlite, False otherwise.
- Return type
bool
-
create_schema()[source]¶ Create database schema using SqlAlchemy. Call once
table_definitionsare set.Use with caution – will destroy all your data!
-
__weakref__¶ list of weak references to the object (if defined)
-
class
-
class
summer.sf.AbstractTableDefinitions[source]¶ Bases:
objectContainer for SqlAlchemy table definitions. Registers itself at session factory. A callback class – use to provide table definitions to ORM.
See
summer.context.Context.orm_init()method.-
define_tables(session_factory: summer.sf.SessionFactory)[source]¶ Override in subclasses to define database tables.
-
__weakref__¶ list of weak references to the object (if defined)
-
-
class
summer.sf.AbstractClassMappings[source]¶ Bases:
objectContainer for SqlAlchemy mappings. Registers itself at session factory. A callback class – use to provide class mappings to ORM.
See
summer.context.Context.orm_init()method.-
__weakref__¶ list of weak references to the object (if defined)
-
dao – ORM data access object support¶
Provides DAO support.
Base Dao class provides access to Dao.session() and
py:meth:Dao.connection properties.
That means that inside any DAO object subclassed from Dao you
can access current (thread-bound) SqlAlchemy session simply by accessing
Dao.session() and direct connection to database by accessing
Dao.connection().
Much more interesting is EntityDao class which is inteded to be
used as a base DAO class for your summer.domain.Entity.
-
class
summer.dao.Dao(session_factory: summer.sf.SessionFactory)[source]¶ Bases:
objectBase DAO class.
Provides safe access to thread bound session through
sessionattribute. Alternative isget_session().-
__init__(session_factory: summer.sf.SessionFactory)[source]¶ Creates
Daoinstance.- Parameters
session_factory (SessionFactory) – session factory to be used
-
property
session¶ Get current session (bound to current thread).
- Returns
current
sqlalchemy.orm.Sessioninstance- Return type
Session
-
property
connection¶ Get current connection (bound to current thread).
Use
connection.connectionto obtain Python DB API 2.0 connection object.- Returns
current
sqlalchemy.engine.Connectioninstance- Return type
Connection
-
__weakref__¶ list of weak references to the object (if defined)
-
-
class
summer.dao.EntityDao(session_factory: summer.sf.SessionFactory, clazz: Type[E])[source]¶ Bases:
summer.dao.DaoBase DAO class for persistent classes subclassed from
summer.domain.Entity.Provides basic persistent operations.
Defines another property –
query()– access to generic SqlAlchemy query overclazz().-
__init__(session_factory: summer.sf.SessionFactory, clazz: Type[E])[source]¶ Creates
EntityDaoinstance.- Parameters
session_factory (SessionFactory) – session factory intance to be passed to superclass (
Dao)clazz (type) – reference to class type
-
property
query¶ Get new query instance using
clazz().- Returns
query over
clazz()- Return type
sqlalchemy.orm.Query
-
_check_entity(entity: E)[source]¶ Check if entity is correct.
- Parameters
entity (Entity) – entity instance to be checked
-
_get_result_list(query: sqlalchemy.orm.query.Query, query_filter: summer.domain.Filter) → List[E][source]¶ Get list of entities with filter offset applied. Useful for paging.
- Parameters
query (Query) – query to be executed
query_filter (Filter) – filter to be used for paging
- Returns
list of entities using query and paging supplied
- Return type
list
-
get(ident: object) → E[source]¶ Get entity by
Entity.idattribute.- Parameters
ident (object) – primary key for
Entity- Returns
- entity instance or raise
NoResultFoundif none is found
- entity instance or raise
- Return type
-
merge(entity: E) → E[source]¶ Merge an entity.
Same as
save(), but entity is associated with current session if it is not. For example if entity comes from another session (or thread).
-
delete(entity_or_id: object) → E[source]¶ Delete an entity.
- Parameters
entity_or_id (object) – either
Entityor its primary key- Returns
just deleted entity instance
- Return type
-
find(query_filter: summer.domain.Filter) → List[E][source]¶ Find collection of entities.
- Parameters
query_filter (Filter) – filter with at least paging set
- Returns
list of entities using query and paging supplied
- Return type
list
-
-
class
summer.dao.CodeEntityDao(session_factory: summer.sf.SessionFactory, clazz: Type[T])[source]¶ Bases:
summer.dao.EntityDaoBase DAO class for persistent classes subclassed from
summer.domain.CodeEntity.-
__init__(session_factory: summer.sf.SessionFactory, clazz: Type[T])[source]¶ Creates
CodeEntityDaoinstance.- Parameters
session_factory (SessionFactory) – session factory intance to be passed to superclass (
Dao)clazz (type) – reference to class type
-