UNIQUE INDEX
を追加する必要があります alembicのexecute
を使用して手動で 方法。このようなものを移行スクリプトに追加します。
from alembic import op
# ...
def upgrade():
# ...
op.execute(
""" CREATE UNIQUE INDEX users_normalized_username
ON users
(lower(username))
"""
)
def downgrade():
# ...
op.execute("DROP INDEX users_normalized_username")
ColumnProperty
を追加することもできます したがって、username
の正規化された表現にアクセスできます 。
from sqlalchemy import Column, String, func, orm
class User(Base):
__tablename__ = 'users'
username = Column(String(32))
normalized_username = orm.column_property(func.lower(username))
# ...
これにより、データベースに余分な列が作成されることはありませんが、クエリを実行して比較することはできます。
session.query(User).filter(User.normalized_username == func.lower(username)).first()