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.

Reply via email to