Files
deb-python-sqlalchemy-utils/docs/index.rst
Konsta Vesterinen 3060775c38 Fixed TOC levels
2013-11-08 16:36:45 +02:00

4.6 KiB

SQLAlchemy-Utils

SQLAlchemy-Utils provides custom data types and various utility functions for SQLAlchemy.

Using automatic data coercion

SQLAlchemy-Utils provides various new data types for SQLAlchemy and in order to gain full advantage of these datatypes you should use coercion_listener. Setting up the listener is easy:

import sqlalchemy as sa
from sqlalchemy_utils import coercion_listener


sa.event.listen(sa.orm.mapper, 'mapper_configured', coercion_listener)

The listener automatically detects SQLAlchemy-Utils compatible data types and coerces all attributes using these types to appropriate objects.

Example :

from colour import Color
from sqlalchemy_utils import ColorType


class Document(Base):
    __tablename__ = 'document'
    id = sa.Column(sa.Integer, autoincrement=True)
    name = sa.Column(sa.Unicode(50))
    background_color = sa.Column(ColorType)


document = Document()
document.background_color = 'F5F5F5'
document.background_color  # Color object
session.commit()

Data types

SQLAlchemy-Utils provides various new data types for SQLAlchemy.

sqlalchemy_utils.types

ArrowType

sqlalchemy_utils.types.arrow

ArrowType

ChoiceType

sqlalchemy_utils.types.choice

ChoiceType

ColorType

sqlalchemy_utils.types.color

ColorType

JSONType

sqlalchemy_utils.types.json

JSONType

LocaleType

sqlalchemy_utils.types.locale

LocaleType

NumberRangeType

sqlalchemy_utils.types.number_range

NumberRangeType

PasswordType

sqlalchemy_utils.types.password

PasswordType

PhoneNumberType

sqlalchemy_utils.types.phone_number

PhoneNumberType

ScalarListType

sqlalchemy_utils.types.scalar_list

ScalarListType

TimezoneType

sqlalchemy_utils.types.timezone

TimezoneType

URLType

sqlalchemy_utils.types.url

URLType

UUIDType

sqlalchemy_utils.types.uuid

UUIDType

Aggregated attributes

sqlalchemy_utils.aggregates

aggregated_attr

The generates decorator

sqlalchemy_utils.decorators

generates

Generic Relationship

Generic relationship is a form of relationship that supports creating a 1 to many relationship to any target model.

from sqlalchemy_utils import generic_relationship

class User(Base):
    __tablename__ = 'user'
    id = sa.Column(sa.Integer, primary_key=True)

class Customer(Base):
    __tablename__ = 'customer'
    id = sa.Column(sa.Integer, primary_key=True)

class Event(Base):
    __tablename__ = 'event'
    id = sa.Column(sa.Integer, primary_key=True)

    # This is used to discriminate between the linked tables.
    object_type = sa.Column(sa.Unicode(255))

    # This is used to point to the primary key of the linked row.
    object_id = sa.Column(sa.Integer)

    object = generic_relationship(object_type, object_id)


# Some general usage to attach an event to a user.
us_1 = User()
cu_1 = Customer()

session.add_all([us_1, cu_1])
session.commit()

ev = Event()
ev.object = us_1

session.add(ev)
session.commit()

# Find the event we just made.
session.query(Event).filter_by(object=us_1).first()

# Find any events that are bound to users.
session.query(Event).filter(Event.object.is_type(User)).all()

Utility functions

sqlalchemy_utils.functions

declarative_base

declarative_base

escape_like

escape_like

has_changes

has_changes

identity

identity

is_indexed_foreign_key

is_indexed_foreign_key

naturally_equivalent

naturally_equivalent

non_indexed_foreign_keys

non_indexed_foreign_keys

sort_query

sort_query

License