Uma coluna de tags tem valores como "maçã banana laranja" e "morango banana limão". Eu quero encontrar a declaração equivalente SQLAlchemy para
SELECT * FROM table WHERE tags LIKE "%banana%";
O que devo passar Class.query.filter()
para fazer isso?
python
sqlalchemy
Gary Oldfaber
fonte
fonte
tags
tabela, onde você armazena o nome da tag e outras informações da tag, e você terá umatask_tags
tabela, que terá um registro para cada tag adicionada à tarefa. Portanto, a tarefa com 2 tags terá apenas 2 registros natask_tags
tabela.Somando-se a resposta acima, quem procura uma solução, você também pode tentar o operador 'combinar' em vez de 'gostar'. Não quero ser tendencioso, mas funcionou perfeitamente para mim no Postgresql.
Note.query.filter(Note.message.match("%somestr%")).all()
Ele herda funções de banco de dados como CONTAINS e MATCH . No entanto, não está disponível no SQLite.
Para obter mais informações, acesse Operadores de filtro comuns
fonte
to_tsquery
o que permite que você adicione operadores de texto para coisas comoOR
eAND
postgresql.org/docs/current/...tente este código
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))
fonte
Usar o PostgreSQL
like
( veja a resposta aceita acima ) de alguma forma não funcionou para mim, embora os casos correspondam , masilike
(case i nsensisitive como ) sim.fonte
ILIKE
é a versãoLIKE
que não diferencia maiúsculas de minúsculas de , portanto, suas entradas diferem apenas no caso.Se você usa sql nativo, pode consultar meu código, caso contrário, ignore minha resposta.
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()
fonte