PyAMS SQLAlchemy integration¶
+pyams_alchemy package is a small package which can be used to make SQLAlchemy integration more simple.
+The main goal of pyams_alchemy package is to define the pyams_alchemy.engine.AlchemyEngineUtility
class:
+this class can be stored persistently into PyAMS local site manager (see PyAMS site management) to store settings of an
+SQLAlchemy engine; on user request, the pyams_alchemy.engine.get_user_session()
function can be used to get
+access to a new SQLAlchemy engine session matching these settings which will to be bound to current Pyramid’s
+transaction.
Dynamic schema names¶
+Some times you may have to be able to setup, for a given table, a schema name which is not static but can be dynamic +through a configuration option.
+This can be done easily with the help of the pyams_alchemy.mixin.DynamicSchemaMixin
which you can inherit from
+in any SQLAlchemy table subclass.
When this is done, the schema name can be defined into Pyramid’s configuration file into a setting which is called +pyams_alchemy:{module_name}.{class_name}.schema; for example like in +pyams_alchemy:pyams_content.package.TableName.schema. If not specified, the table’s schema name can be defined in a +classic __schema__ table’s attribute.
+Submodules¶
+pyams_alchemy.engine module¶
+-
+
-
+class
pyams_alchemy.engine.
AlchemyEngineUtility
(name='', dsn='', echo=False, use_pool=True, pool_size=25, pool_recycle=-1, echo_pool=False, encoding='utf-8', convert_unicode=False, **kwargs)¶
+ Bases:
+object
SQLAlchemy engine utility
+-
+
-
+
clear_engine
()¶
+
-
+
-
+
convert_unicode
¶
+ Convert Unicode
+
-
+
-
+
dsn
¶
+ DSN: RFC-1738 compliant URL for the database connection
+
-
+
-
+
echo
¶
+ Echo SQL?: Log all SQL statements to system logger
+
-
+
-
+
echo_pool
¶
+ Echo pool?: Log all pool checkouts/checkins to system logger?
+
-
+
-
+
encoding
¶
+ Encoding
+
-
+
-
+
get_engine
(use_pool=True)¶
+
-
+
-
+
name
¶
+ Engine name: Keep empty if this engine is the default engine…
+
-
+
-
+
pool_recycle
¶
+ Pool recycle time: SQLAlchemy connection recycle time (-1 for none)
+
-
+
-
+
pool_size
¶
+ Pool size: SQLAlchemy connections pool size
+
-
+
-
+
use_pool
¶
+ Use connections pool?: If ‘no’, collections pooling will be disabled
+
-
+
-
+
-
+class
pyams_alchemy.engine.
ConnectionCleanerThread
(group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)¶
+ Bases:
+threading.Thread
Background thread used to clean unused database connections
+Each connection is referenced in CONNECTION_TIMESTAMPS mapping on checkin and is invalidated +if not being used after 5 minutes
+-
+
-
+
run
()¶
+
-
+
-
+
timeout
= 300¶
+
-
+
-
+
-
+class
pyams_alchemy.engine.
EnginesVocabulary
(context, **kw)¶
+ Bases:
+zope.componentvocabulary.vocabulary.UtilityVocabulary
SQLAlchemy engines vocabulary
+-
+
-
+
interface
= <InterfaceClass pyams_alchemy.interfaces.IAlchemyEngineUtility>¶
+
-
+
-
+
nameOnly
= True¶
+
-
+
-
+
-
+class
pyams_alchemy.engine.
PersistentAlchemyEngineUtility
(name='', dsn='', echo=False, use_pool=True, pool_size=25, pool_recycle=-1, echo_pool=False, encoding='utf-8', convert_unicode=False, **kwargs)¶
+ Bases:
+persistent.Persistent
,pyams_alchemy.engine.AlchemyEngineUtility
,zope.container.contained.Contained
Persistent implementation of SQLAlchemy engine utility
+
-
+
-
+
pyams_alchemy.engine.
get_engine
(engine, use_pool=True)¶
+ Get engine matching given utility name
+
-
+
-
+
pyams_alchemy.engine.
get_session
(engine, join=True, status='active', request=None, alias=None, twophase=True, use_zope_extension=True, use_pool=True)¶
+ Get a new SQLALchemy session
+Session is stored in request and in session storage. +See
+get_user_session()
function to get arguments documentation.
-
+
-
+
pyams_alchemy.engine.
get_user_session
(engine, join=True, status='active', request=None, alias=None, twophase=True, use_zope_extension=True, use_pool=True)¶
+ Get a new SQLAlchemy session
++
++ + + + +Parameters: +-
+
- engine (str) – name of an SQLAlchemy engine session utility; if engine is not given as a string, it is +returned as-is. +
- join (bool) – if True, session is joined to the current Pyramid transaction +
- status (str) – status of the new session; can be STATUS_ACTIVE or STATUS_READONLY +
- request – currently running request +
- alias (str) – alias to use in connections mapping for this session +
- twophase (bool) – if False, session will be isolated and not included into two-phase transactions mechanism +
- use_zope_extension (bool) – if True, use ZopeTransactionExtension scoped session +
- use_pool (bool) – if True, this session will use a pool +
-
+
-
+
pyams_alchemy.engine.
handle_added_engine
(event)¶
+ Register new SQLAlchemy engine when added
+
-
+
-
+
pyams_alchemy.engine.
handle_modified_engine
(event)¶
+ Clear SQLAlchemy engine volatile attributes when modified
+
-
+
-
+
pyams_alchemy.engine.
handle_pool_checkin
(connection, record)¶
+ Pool connection checkin
+Called when a connection returns to the pool. +We apply a timestamp on the connection record to be able to close it automatically +after 5 minutes without being used.
+
-
+
-
+
pyams_alchemy.engine.
handle_pool_checkout
(connection, record, proxy)¶
+ Pool connection checkout
+Called when a connection is retrieved from the pool. +If the connection record is already marked, we remove it from the mapping.
+
-
+
-
+
pyams_alchemy.engine.
handle_removed_engine
(event)¶
+ Un-register an SQLAlchemy engine when deleted
+
pyams_alchemy.loader module¶
+ + +pyams_alchemy.metaconfigure module¶
+-
+
-
+
pyams_alchemy.metaconfigure.
engine_directive
(context, name='', dsn='', echo=False, use_pool=True, pool_size=25, pool_recycle=-2, echo_pool=False, encoding='utf-8', convert_unicode=False, **kwargs)¶
+