@DeboshiR
Свободу разработчикам!!!

Как исправить ошибку при использовании OR и пользовательской функции?

Функцию
def lower_string(_str):
    return _str.lower()

Добавляю в базу
con.create_function("LOWER", 1, lower_string)
И выполняю запрос
SELECT * FROM incoming WHERE lower("index") LIKE lower("%иванов%")

Функция-то отлично срабатывает, но как только добавляю OR
SELECT * FROM incoming WHERE lower("index") LIKE lower("%иванов%") OR
lower("num_incoming") LIKE lower("%иванов%")

то сразу возникает ошибка
sqlite3.OperationalError: user-defined function raised exception

Почему ошибка возникает только в случае наличия OR и как её можно исправить?
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
@DeboshiR Автор вопроса
Свободу разработчикам!!!
Всё оказалось достаточно очевидно: т.к. в таблице не все поля имели строковый тип, то функция lower() не могла их обработать. Чтобы исправить ошибку я просто добавил преобразование в строку:
def lower_string(_str):
    return str(_str).lower()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
netpastor
@netpastor
Python developer
А зачем писать свою функцию когда есть встроенная?
https://www.w3resource.com/sqlite/core-functions-l...
Ответ написан
Ваш ответ на вопрос

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

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