Чтобы добавить к ответу @ jspcal, если модель определена с использованием class
, то вам нужно будет либо создать ее экземпляр самостоятельно после объявления model
, либо использовать конструкцию text
.
т.е.
from sqlalchemy.sql.expressions import func
class User(Base):
__tablename__ = 'user'
username = Column('username', String(24), nullable=False)
Index('user_username_index', func.lower(User.username), unique=True)
с использованием текстового контракта;
from sqlalchemy.sql.expressions import text
class User(Base):
__tablename__ = 'user'
__table_args__ = (
Index('ix_user_name', text('LOWER(name)')),
)
username = Column('username', String(24), nullable=False)
NB: table_args должен быть кортежем, поэтому необходимо использовать запятую в скобках.
Это создаст индекс для username
столбца таблицы user
в строчной форме. Поэтому данные, хранящиеся в этом столбце, уникальны и не чувствительны к регистру.