sqlalchemy-things’s documentation¶
Utility collection for development with SQLAlchemy 1.4 / 2.0 ORM.
Installation¶
Installing sqlalchemy-things
with pip:
pip install sqlalchemy-things
Optional requirements¶
For PostgreSQL support, you also need install asyncpg
:
pip install asyncpg
For MySQL support, you also need install aiomysql
:
pip install aiomysql
For SQLite3 support, you also need install aiosqlite
:
pip install aiosqlite
Examples¶
Single table inheritance¶
from sqlalchemy_things.declarative import (
IntegerPrimaryKeyMixin,
PolymorphicMixin,
)
metadata = sa.MetaData()
Base = orm.declarative_base(metadata=metadata)
class Parent(Base, IntegerPrimaryKeyMixin, PolymorphicMixin):
__tablename__ = 'single_table'
class ChildA(Parent):
__mapper_args__ = {'polymorphic_identity': 'child_a'}
some_field = sa.Column(sa.String(255))
class ChildB(Parent):
__mapper_args__ = {'polymorphic_identity': 'child_b'}
other_filed = sa.Column(sa.String(127))
Joined table inheritance with cascade primary key mixins¶
from sqlalchemy_things.declarative import (
CascadeIntegerPrimaryKeyMixin,
PolymorphicMixin,
)
metadata = sa.MetaData()
Base = orm.declarative_base(metadata=metadata)
class Parent(Base, CascadeIntegerPrimaryKeyMixin, PolymorphicMixin):
__tablename__ = 'cascade_pk_parent_table'
class ChildA(Parent):
__tablename__ = 'cascade_pk_child_table_a'
__mapper_args__ = {'polymorphic_identity': 'child_a'}
field = sa.Column(sa.String(255))
class ChildB(Parent):
__tablename__ = 'cascade_pk_child_table_b'
__mapper_args__ = {'polymorphic_identity': 'child_b'}
field = sa.Column(sa.String(127))
Joined table inheritance with simple primary key mixins¶
from sqlalchemy_things.declarative import (
IntegerPrimaryKeyMixin,
ParentPrimaryKeyMixin,
PolymorphicMixin,
)
metadata = sa.MetaData()
Base = orm.declarative_base(metadata=metadata)
class Parent(Base, IntegerPrimaryKeyMixin, PolymorphicMixin):
__tablename__ = 'inherited_pk_parent_table'
class ChildA(ParentPrimaryKeyMixin, Parent):
__tablename__ = 'inherited_pk_child_table_a'
__mapper_args__ = {'polymorphic_identity': 'child_a'}
field = sa.Column(sa.String(255))
class ChildB(ParentPrimaryKeyMixin, Parent):
__tablename__ = 'inherited_pk_child_table_b'
__mapper_args__ = {'polymorphic_identity': 'child_b'}
field = sa.Column(sa.String(127))
Reference¶
Custom column types¶
- class sqlalchemy_things.column_types.UUIDType(*args, **kwargs)¶
Bases:
sqlalchemy.sql.type_api.TypeDecorator
Backend-agnostic UUID type.
Mixins for signle and joined inheritance¶
- class sqlalchemy_things.declarative.PolymorphicMixin¶
Bases:
sqlalchemy_things.declarative.base.DeclarativeMixin
Polymorphic mixin for single table and joined table inheritance.
Primary key mixins for signle and joined table inheritance¶
- class sqlalchemy_things.declarative.BigIntegerPrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.DeclarativeMixin
Big integer primary key mixin.
Warning
SQLite backend not support autoincrement for BigInteger column type.
- class sqlalchemy_things.declarative.DateTimePrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.DeclarativeMixin
Datetime primary key mixin.
- class sqlalchemy_things.declarative.IntegerPrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.DeclarativeMixin
Integer primary key mixin.
- class sqlalchemy_things.declarative.UUIDPrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.DeclarativeMixin
UUID primary key mixin.
Primary key mixins for joined table inheritance¶
- class sqlalchemy_things.declarative.CascadeBigIntegerPrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.InheritedDeclarativeMixin
Cascade big integer primary key mixin for joined table inheritance.
Warning
SQLite backend not support autoincrement for BigInteger column type.
- class sqlalchemy_things.declarative.CascadeDateTimePrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.InheritedDeclarativeMixin
Cascade datetime primary key mixin for joined table inheritance.
- class sqlalchemy_things.declarative.CascadeIntegerPrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.InheritedDeclarativeMixin
Cascade integer primary key mixin for joined table inheritance.
- class sqlalchemy_things.declarative.CascadeUUIDPrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.InheritedDeclarativeMixin
Cascade UUID primary key mixin for joined table inheritance.
- class sqlalchemy_things.declarative.ParentPrimaryKeyMixin¶
Bases:
sqlalchemy_things.declarative.base.InheritedDeclarativeMixin
Parent primary key mixin for child class in joined table inheritance without cascade primary key mixin.
Warning
This mixin must precede the parent class when declaring a child class.
Pagination¶
- class sqlalchemy_things.pagination.OffsetPage(items: List[Any], number: int, page_size: int, total: int)¶
Bases:
object
- class sqlalchemy_things.pagination.OffsetPaginator(page_size: int = 20, max_page: Optional[int] = None)¶
Bases:
object
Utils for single and joined inheritance¶
- sqlalchemy_things.declarative.get_inherited_column(cls: Any, name: str, default: sqlalchemy.sql.schema.Column) Optional[sqlalchemy.sql.schema.Column] ¶
Utility function for column inheriting in mixins.
- Parameters
name – column name of parent class;
default – default value if not found in parent class.
- sqlalchemy_things.declarative.get_inherited_primary_key(cls: Any) Optional[sqlalchemy.sql.schema.Column] ¶
Utility function for creating child primary key in joined table inheritance.
Releases¶
Version 0.10.0¶
Added
Handling
number
< 1 forpagination.OffsetPaginator.get_page_async()
andpagination.OffsetPaginator.get_page_sync
.
Changed
renamed
page_number
tonumber
forpagination
classes;renamed
total_items
tototal
forpagination
classes.
Version 0.9.0¶
Changed
ValueError
exception replaced with returnNone
when exceeding themax_page
inpagination.OffsetPage
.
Version 0.8.0¶
Added
pagination.OffsetPage
.
Changed
Renamed
prepare_page_async()
method toget_page_async()
inpagination.OffsetPaginator
;Renamed
prepare_page_sync()
method toget_page_sync()
inpagination.OffsetPaginator
.Removed
get_items()
method frompagination.OffsetPaginator
;get_last_page_number()
method frompagination.OffsetPaginator
;get_next_page_number()
method frompagination.OffsetPaginator
;get_previous_page_number()
method frompagination.OffsetPaginator
.
Version 0.7.0¶
Added
get_items()
method forpagination.OffsetPaginator
;get_last_page_number()
method forpagination.OffsetPaginator
;get_next_page_number()
method forpagination.OffsetPaginator
;get_previous_page_number()
method forpagination.OffsetPaginator
.
Changed
Renamed
get_page_async
method toprepare_page_async
inpagination.OffsetPaginator
;Renamed
get_page_sync
method toprepare_page_sync
inpagination.OffsetPaginator
.
Removed
pagination.OffsetPage
.
Version 0.6.0¶
Added
max_page
attribute forpagination.OffsetPaginator
.
Changed
Renamed
next
attribute tonext_number
inpagination.OffsetPage
;Renamed
previous
attribute toprevious_number
inpagination.OffsetPage
;Renamed
limit
attribute topage_size
inpagination.OffsetPaginator
.
Version 0.5.0¶
Changed
Renamed
pagination.CountOffsetPage
topagination.OffsetPage
;Renamed
pagination.CountOffsetPaginator
topagination.OffsetPaginator
;Renamed
get_async
method toget_page_async
inpagination.OffsetPaginator
;Renamed
get_sync
method toget_page_sync
inpagination.OffsetPaginator
.
Version 0.3.0¶
Changed
Rename
definition
attribute todiscriminator
indeclarative.PolymorphicMixin
.
Version 0.1.0¶
Changed
Rename
CascadeDeclarativeMixin
toInheritedDeclarativeMixin
;Rename
InheritedPrimaryKeyMixin
toParentPrimaryKeyMixin
;Move
ParentPrimaryKeyMixin
fromdeclarative.base
todeclarative.primary_keys
;Move
get_inherited_primary_key
fromdeclarative.base
todeclarative.primary_keys
.