В кириллице func.lower может обрабатываться в SQLAlchemy с ошибкой.
Пример кода:
category_in_db = db.session.query(Category).filter_by(user_id=user_id)\
.filter(func.lower(Category.name, type_=String) == category_name.lower()).first()
.filter(func.lower(Category.name, type_=String) == category_name.lower()).first()
Сравниваются две выражения. Допустим в БД находится значение СОн. Если оно именно такого плана, когда в БД сохранены заглавные буквы, то при сравнении СОн == сон. Они будут не равны друг другу.
Такая проблема может быть из-за того, что база данных создана без учета кириллицы.
Один из вариантов сохранять все в нижнем регистре. Другой – починить кодировку в БД.
Как правильно создать таблицу с нужно кодировкой в PostgreSQL.