Bạn cần thêm UNIQUE INDEX thủ công bằng cách sử dụng execute của alembic phương pháp. Thêm một cái gì đó như thế này vào tập lệnh di chuyển của bạn.
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")
Bạn cũng có thể thêm một ColumnProperty vì vậy bạn có quyền truy cập vào biểu diễn chuẩn hóa của 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))
# ...
Điều này sẽ không tạo thêm một cột trong cơ sở dữ liệu của bạn nhưng bạn sẽ có thể truy vấn và so sánh với nó.
session.query(User).filter(User.normalized_username == func.lower(username)).first()