Эликсир / SQLAlchemy эквивалентно SQL" LIKE " заявление?


Я использую описанную схему типа MySQLicious здесь для простой системы мечения. Я прочитал некоторые альтернативные реализации схемы тегов в 4 разных потоках SO, и это лучше всего соответствует моим потребностям.

в коллекции записей есть Теги " apple banana orange "и" strawberry banana lemon", и я пытаюсь найти эквивалентный оператор Elixir/SQLAlchemy для

SELECT * FROM table WHERE tags LIKE "%banana%";

Я не смог найти такой способ структуру Класс.запрос.команда filter/filter_by (), и не может видеть подобный метод в документации для любого модуля. Есть ли простой способ сделать это? Или я должен просто использовать raw SQL.

Дополнительный Вопрос: Недостатком схемы MySQLicious является тот случай, когда я могу захотеть найти "%apple%", но вернуть "ананас". Есть ли высокоуровневый способ справиться с этим тестовым случаем? Или я должен просто включить ведущий пробел в каждый запрос?

n. B: для тех, кто заботится, это мой первый опыт работы с базами данных, поэтому я могу упустить основные преимущества схемы, упомянутой в других потоках. Мое приложение предназначено для регистрации предложения или двух о выполненной задаче, со столбцами [TaskID, Теги, заметки, StartTime, StopTime, TimeTaken], немного похоже на простой журнал. В основном для учебных целей. Я хочу иметь возможность поиска по отдельным тегам, чтобы узнать примерно, сколько времени я трачу на задачи.

3 53

3 ответа:

каждый столбец имеет .как метод, который может быть использован в качестве фильтрующего выражения.

>>> Note.query.filter(Note.message.like("%somestr%")).all()
[]

добавляя к приведенному выше ответу, кто бы ни искал решение, вы также можете попробовать оператор "match" вместо "like". Не хочу быть предвзятым, но он отлично работал для меня в Postgresql.

Note.query.filter(Note.message.match("%somestr%")).all()

он наследует функции базы данных, такие как содержит и матч. Однако он недоступен в SQLite.

более подробная информация Общие Операторы Фильтра

попробуйте этот код

output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))