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()