Awesome, thanks so much for the quick response.
On Sun, Apr 13, 2014 at 7:00 PM, Michael Bayer <mike...@zzzcomputing.com>wrote: > you need to turn your __table_args__ into a callable: > > @declared_attr > def __table_args__(cls): > return (Index(…, func.lower(cls.name), …), ) > > or just use a string for your functional index: Index(…, > text(“LOWER(name)”), …) > > > On Apr 13, 2014, at 9:22 PM, Joshua Ma <m...@joshma.com> wrote: > > Is there a way to create a functional index in a declarative model without > referencing the actual column? I currently have something like > > class MyModel(db.Base): > name = db.Column('name', db.String(255)) > __table_args__ = ( > Index('mymodel_lower_name_idx', func.lower(name), > postgresql_ops={'name': 'text_pattern_ops'}), > ) > > which is slightly inconvenient because I usually declare all my columns > under __table_args__. > > More importantly, though, I use a mixin for some models, with the > __table_args__ in the model and the column in the mixin: > > class MyMixin(object): > name = db.Column(db.String(64), nullable=False) > > class MyModel(MyMixin, db.Base): > __table_args__ = ( > Index('mymodel_lower_name_idx', func.lower(MyMixin.name), > postgresql_ops={'name': 'text_pattern_ops'}), > ) > > but this doesn't seem to work, I get "ArgumentError: __contains__ requires > a string argument" at runtime. > > *The rest of my indices are just strings (e.g. Index('mymodel_name_idx', > 'name')) - is there a similar way to create functional ones?* I tried > 'lower(name)' but it doesn't like that either since it's not a valid column > (KeyError: 'lower(name)'). > > Thanks! > Josh > > -- > 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 http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/CgSJUlelhGs/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- 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 http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.