Подтвердить что ты не робот

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

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

В коллекции записей есть теги "яблочный банановый апельсин" и "клубничный банановый лимон", и я пытаюсь найти эквивалентный оператор Elixir/SQLAlchemy для

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

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

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

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

4b9b3361

Ответ 1

Каждый столбец имеет .like метод, который может использоваться как предложение фильтра.

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

Ответ 2

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

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

Он наследует функции базы данных, такие как КОНТЕЙНЕРЫ и MATCH. Однако он не доступен в SQLite.

Для получения дополнительной информации перейдите Общие операторы фильтра

Ответ 3

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

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