Ответ 1
Каждый столбец имеет .like метод, который может использоваться как предложение фильтра.
>>> Note.query.filter(Note.message.like("%somestr%")).all()
[]
Я использую схему типа типа 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], немного похожим на простой журнал. В основном для учебных целей. Я хочу, чтобы иметь возможность искать по отдельным тегам, чтобы узнать, сколько времени я трачу на задание.
Каждый столбец имеет .like метод, который может использоваться как предложение фильтра.
>>> Note.query.filter(Note.message.like("%somestr%")).all()
[]
Добавляя к вышеуказанному ответу, кто ищет решение, вы также можете попробовать "сопоставить" оператор вместо "как". Не хочу быть предвзятым, но он отлично работал у меня в Postgresql.
Note.query.filter(Note.message.match("%somestr%")).all()
Он наследует функции базы данных, такие как КОНТЕЙНЕРЫ и MATCH. Однако он не доступен в SQLite.
Для получения дополнительной информации перейдите Общие операторы фильтра
попробуйте этот код
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))