Una columna de etiquetas tiene valores como "manzana plátano naranja" y "fresa plátano limón". Quiero encontrar la declaración equivalente de SQLAlchemy a
SELECT * FROM table WHERE tags LIKE "%banana%";
¿A qué debo pasar Class.query.filter()
para hacer esto?
python
sqlalchemy
Gary Oldfaber
fuente
fuente
tags
tabla, donde almacena el nombre de la etiqueta y otra información de la etiqueta, y tendrá unatask_tags
tabla, que tendrá un registro por cada etiqueta agregada a la tarea. Entonces, la tarea con 2 etiquetas solo tendrá 2 registros en latask_tags
tabla.Además de la respuesta anterior, quien busque una solución, también puede probar el operador 'coincidir' en lugar de 'me gusta'. No quiero ser parcial, pero funcionó perfectamente para mí en Postgresql.
Note.query.filter(Note.message.match("%somestr%")).all()
Hereda funciones de base de datos como CONTAINS y MATCH . Sin embargo, no está disponible en SQLite.
Para obtener más información, vaya a Operadores de filtros comunes
fuente
to_tsquery
que le permite agregar operadores de texto para cosas comoOR
yAND
postgresql.org/docs/current/…prueba este código
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))
fuente
El uso de PostgreSQL
like
( véase la respuesta aceptada por encima ) de alguna manera no me funcionó aunque los casos emparejados , peroilike
(caso i nsensisitive como ) lo hace.fuente
ILIKE
es la versión que no distingue entre mayúsculas y minúsculasLIKE
, por lo que sus entradas diferían solo en mayúsculas y minúsculas.Si usa sql nativo, puede consultar mi código; de lo contrario, simplemente ignore mi respuesta.
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()
fuente