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.