Triggers#

from sqlalchemy.orm import declarative_base
from sqlalchemy_declarative_extensions import declarative_database, Function, Functions, Triggers
from sqlalchemy_declarative_extensions.dialects.postgresql import Trigger

_Base = declarative_base()


@declarative_database
class Base(_Base):
    __abstract__ = True

    functions = Functions().are(
        Function(
            "fancy_trigger",
            """
            BEGIN
            INSERT INTO foo (id) select NEW.id + 1;
            RETURN NULL;
            END
            """,
            language="plpgsql",
            returns="trigger",
        )
    )

    triggers = Triggers().are(
        Trigger.after("insert", on="foo", execute="fancy_trigger")
        .named("on_insert_foo")
        .when("pg_trigger_depth() < 1")
        .for_each_row(),
    )

Note

Triggers options are wildly different across dialects. As such, you should always use the dialect-specific sqlalchemy_declarative_extensions.trigger.base.Trigger subclasses.

Note

Trigger behavior not fully implemented at current time, although it should be functional for the options it does support. Any ability to instantiate an object which produces a syntax error should be considered a bug. Additionally, feature requests for supporting more trigger options are welcome!

class sqlalchemy_declarative_extensions.trigger.base.Trigger#

Describes a generic trigger.

execute#
name#
named(name)#
Parameters

name (str) –

on#
abstract to_sql_create(replace=False)#
to_sql_drop()#
to_sql_update(connection)#
Parameters

connection (sqlalchemy.engine.Connection) –

class sqlalchemy_declarative_extensions.trigger.base.Triggers#
append(trigger)#
Parameters

trigger (Trigger) –

are(*triggers)#
Parameters

triggers (Trigger) –

classmethod coerce_from_unknown(unknown)#
Parameters

unknown (None | Iterable[Trigger] | Triggers) –

Return type

Triggers | None

ignore_unspecified = False#
triggers#
sqlalchemy_declarative_extensions.trigger.base.register_trigger(base_or_metadata, trigger)#

Register a trigger onto the given declarative base or Metadata.

This can be used instead of the static registration through Triggers on a declarative base or MetaData, to imperitively register triggers.

Parameters
  • base_or_metadata (HasMetaData | MetaData) –

  • trigger (Trigger) –