Мне нужно искать с помощью единого поля, которое называется именем , который может соответствовать ни одного, так и последнему. />
Код: Выделить всё
SELECT *
FROM people AS p
WHERE
LOWER(p.last_name || p.first_name) LIKE :name
OR
LOWER(p.first_name || p.last_name) LIKE :name
< /code>
Моя модель < /p>
import sqlalchemy as sa
from sqlalchemy.orm import Mapped, mapped_column
class People(DeclarativeBase):
__tablename__ = "people"
id: Mapped[str] = mapped_column(primary_key=True)
first_name: Mapped[str] = mapped_column(nullable=False, unique=False)
last_name: Mapped[str] = mapped_column(nullable=False, unique=False)
__table_args__ = (
sa.Index(
"ix_people_last_first_name",
sa.text("LOWER(last_name || first_name)"),
),
sa.Index(
"ix_people_first_last_name",
sa.text("LOWER(first_name || last_name)"),
),
)
< /code>
Когда я генерирую миграцию с алембиком, я получаю < /p>
INFO [alembic.autogenerate.compare] Detected added table 'people'
INFO [alembic.autogenerate.compare] Detected added index ''ix_people_first_last_name'' on '()'
INFO [alembic.autogenerate.compare] Detected added index ''ix_people_last_first_name'' on '()'
Sqlalchemy говорит, что здесь можно использовать более низкий в индексе, но он показывает простой случай, а не композитный.
Код: Выделить всё
the text() construct may be used to specify Index expressions, provided the Index is explicitly associated with the Table.
Как это я могу достичь?
Любые предложения или другие варианты приветствуются.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... with-lower