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

tagstabla, donde almacena el nombre de la etiqueta y otra información de la etiqueta, y tendrá unatask_tagstabla, que tendrá un registro por cada etiqueta agregada a la tarea. Entonces, la tarea con 2 etiquetas solo tendrá 2 registros en latask_tagstabla.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_tsqueryque le permite agregar operadores de texto para cosas comoORyANDpostgresql.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
ILIKEes 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