rudieduddie
@rudieduddie
Python-dev and student

Как реализовать регистронезависимый поиск в python?

В асинхронном веб приложении я делаю регистронезависимые запросы к базе данных (aiosqlite) для поиска ФИО из списка профилей в реальном времени:

async def query(*args):
    name,lastname = [x.upper()+"%" for x in args]
    async with aiosqlite.connect(Host.DBPATH) as db:
            cursor = await db.execute("SELECT * FROM profile WHERE UPPER(name) LIKE ? OR UPPER(lastname) LIKE ?",(name,lastname))
            return await cursor.fetchall()


Как и для многих, для меня было сюрпризом, что поиск на русском языке не будет работать.
Я бы хотел спросить, как реализовать асинхронный регистронезависимый поиск по нескольким полям базы данных ( в данных момент sqlite, но переехать можно)?

Если я правильно понимаю, aiosqlite не поддерживает иных кодировок, верно?

NO CASE COLLATE пробовал - не работает.

Приложение через pipelines подключено к heroku.
  • Вопрос задан
  • 473 просмотра
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Можно, как быстрое решение, продублировать данные в таблице, обработав их снаружи преобразованием в upper case.
Тогда вам придётся подавать на вход в запросы уже преобразованные (подготовленные под формат индекса) данные.

А вот здесь есть статья о том как добавить collate для русского регистронезависимого сравнения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы