Столбец тегов содержит такие значения, как «яблоко, банан, апельсин» и «клубника, банан, лимон». Я хочу найти эквивалентную инструкцию SQLAlchemy для
SELECT * FROM table WHERE tags LIKE "%banana%";
На что мне перейти, чтобы Class.query.filter()
это сделать?
python
sqlalchemy
Гэри Олдфабер
источник
источник
tags
таблица, в которой вы храните имя тега и другую информацию о теге, и у вас будетtask_tags
таблица, которая будет иметь по одной записи для каждого тега, добавленного к задаче. Таким образом, задача с двумя тегами будет иметь только две записи вtask_tags
таблице.Добавляя к приведенному выше ответу, кто бы ни ищет решение, вы также можете попробовать оператор «сопоставить» вместо «нравится». Не хочу быть предвзятым, но у меня это отлично сработало в Postgresql.
Note.query.filter(Note.message.match("%somestr%")).all()
Он наследует функции базы данных, такие как CONTAINS и MATCH . Однако он недоступен в SQLite.
Дополнительные сведения см. В разделе Общие операторы фильтров.
источник
to_tsquery
что позволяет вам добавлять текстовые операторы для таких вещей, какOR
иAND
postgresql.org/docs/current/…попробуйте этот код
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))
источник
Использование PostgreSQL
like
( см обслуживаемого ответ выше ) как - то не работа для меня , хотя случаи соответствуют , ноilike
(случай я nsensisitive как ) делает.источник
ILIKE
- это версия без учета регистраLIKE
, поэтому ваши входные данные различались только регистром.Если вы используете собственный sql, вы можете обратиться к моему коду, иначе просто проигнорируйте мой ответ.
SELECT * FROM table WHERE tags LIKE "%banana%";
from sqlalchemy import text bar_tags = "banana" # '%' attention to spaces query_sql = """SELECT * FROM table WHERE tags LIKE '%' :bar_tags '%'""" # db is sqlalchemy session object tags_res_list = db.execute(text(query_sql), {"bar_tags": bar_tags}).fetchall()
источник