Рассмотрим декларативную модель SQLAlchemy с индексированным полем String
:
class User(Base):
name = Column(String(100), index=True, nullable=False)
Поле name
чувствительно к регистру, это означает, что оригинальный регистр должен быть сохранен, но эффективные нечувствительные к регистру запросы по индексу должны поддерживаться.
Какой лучший способ добиться этого и реализовать в SQLAlchemy?
Запросы могут использовать lower()
при необходимости
session.query(User).filter_by(name=lower('SOME_name'))
но это не имеет большого значения, если решение элегантно и производительно.
Запросы с использованием ILIKE
и уровня Postgres lower()
неприемлемы из-за требований к производительности, они были протестированы и не выполняют достаточно быстро на больших таблицах для моего варианта использования.