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.

Reply via email to