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.

Reply via email to