You need to put propagate=True on your listen call for it to take effect for subclasses.
On Wed, Nov 7, 2018, 7:34 PM Luke <lmerg...@gmail.com wrote: > Michael and others: > > My goal is to have an orm Mixin that implements everything for Postgresql > tsvector full-text search > that I can import as a single object into a new project. > > I haven't been able to get a event.listen( ... trigger DDL ...) to work as > part of a Mixin. I don't really > understand the docs on __declare_last__, so I'm working from some > stackoverflow answers. The code > creates the expected Index and Trigger if the statements are defined > outside of the class. > > ``` > class Searchable: > """ An SQLAlchemy ORM Mixin that creates Postgres TSVECTOR columns > > :example: > >>> class Text(Searchable, Base): > >>> pass > > """ > > # Original inspiration: > http://shisaa.jp/postset/postgresql-full-text-search-part-1.html > > # __abstract__ = True > > _trigger_ddl = DDL( > "create trigger ts_update before insert or update on text for " > "each row execute procedure tsvector_update_trigger(tsvector, " > "'pg_catalog.english', 'text');" > ) > > # Data Fields > text = Column(String) > > # PostgreSQL Full Text Search field > # > http://www.postgresql.org/docs/current/static/datatype-textsearch.html > tsvector = Column(postgresql.TSVECTOR) > > @declared_attr > def __table_args__(cls): > # CREATE INDEX tsvector_idx ON tsvector USING > gin(to_tsvector('english', message)); > # Note: __table_args__ should return a tuple > return (Index( > "tsvector_idx_%s" % cls.__tablename__, > "tsvector", > postgresql_using="gin", > ),) > > @classmethod > def __declare_last__(cls): > event.listen( > cls, > "after_create", > cls._trigger_ddl.execute_if(dialect="postgresql"), > ) > ``` > > When __abstract__ = True the subclass is unmapped and no ddl is emitted on > create_all(). I did not expect that. > > Is it possible to have the Mixin execute the event.listen or otherwise > created the trigger? > > Thanks, > Luke > > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.