Estoy construyendo una consulta con SQLAlchemy y SQLite3 en la que me gustaría seleccionar filas en las que una columna String contiene una subcadena particular. Cuál es la mejor manera de lograr esto?Pregunta de SQLAlchemy donde una columna contiene una subcadena
Respuesta
Filtrar por db.table.column.like('%needle%')
. También hay ilike
para una búsqueda insensible a mayúsculas y minúsculas.
Para una interfaz más elegante, puede permitir los comodines "dir" conocidos.
if '*' in needle or '_' in needle:
looking_for = needle.replace('_', '__')\
.replace('*', '%')\
.replace('?', '_')
else:
looking_for = '%{0}%'.format(needle)
result = db.table.filter(db.table.column.ilike(looking_for))
Notas:
- El
db.table.filter
ydb.table.column
es paraSQLSoup
(SQLSoup es útil si la base de datos se hizo por otra aplicación) - para SQLAlchemy Core es
select(column_list).where(table.c.column.ilike(expr))
. Esta interfaz es el camino a seguir cuando desea obtener toda la potencia del SQL sin procesar, sin tener que componer declaraciones a mano mediante interpolación de cadenas (utilícela junto con SQLSoup para introspección, por lo que no necesita declarar tablas) - para SQLAlchemy Declarative (el utilizado en el frasco) es
Model.query.filter(Model.field.ilike(expr))
Mientras table.c.column.like("%...%")
debería funcionar, hay una manera más directa a decir lo que quiere:
table.c.column.contains("needle")
Esto suele generar la misma consulta SQL pero es mejor leer para los no iniciados. Tenga en cuenta que contiene no parece escapar "_" y "%".
like (% ...%) no es tan directo, no, pero tengo un grupo de tablas (modelos) que convierten field.contains (k) en el campo LIKE '%%' || k || '%%' cada vez: no muestra los resultados correctos. – shermy
probar este
Model.query.filter(Model.columnName.contains('sub_string'))
Gracias por esta respuesta. Has resuelto mi problema. Pero puedes dar detalles sobre esta función. Quiero saber cómo funciona. – Wally
@Wally [sqlalchemy.orm.query.Query.filter] (http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.filter) – danodonovan
@Wally have just revisé este comentario que no fue muy útil, lo siento. Esto es mejor [sqlalchemy.orm.attributes.QueryableAttribute.contains] (http://docs.sqlalchemy.org/en/latest/orm/internals.html?highlight=contains#sqlalchemy.orm.attributes.QueryableAttribute.contains) – danodonovan
- 1. Compruebe si una cadena contiene una subcadena
- 2. ¿Cómo puedo saber si una variable VARCHAR contiene una subcadena?
- 3. Cómo determinar si una cadena contiene una subcadena específica
- 4. ¿El primer índice de la lista contiene una subcadena?
- 5. Comprobar si WPF DataRowView contiene una columna
- 6. SQL - Retirar subcadena del texto de una columna
- 7. PF filtrado de una columna Datatable que contiene una fecha
- 8. Determinar si una matriz de cadenas contiene una cierta subcadena en ruby
- 9. Como llegar sqlalchemy longitud de una columna de cadena
- 10. En SQLAlchemy, ¿cómo creo una columna de 'fecha de MySQL'?
- 11. SQLAlchemy Tipo personalizado que contiene varias columnas
- 12. SQLAlchemy: longitud máxima de columna
- 13. ¿Prueba una cadena para una subcadena?
- 14. Seleccionar donde una entidad contiene una lista que es un subconjunto de otra lista
- 15. CSS: UL horizontal donde LI contiene una TABLA. ¿Posible?
- 16. Sustituir una subcadena con otra subcadena
- 17. SqlAlchemy no aceptará el valor datetime.datetime.now en una columna DateTime
- 18. ¿Cuál es la forma de búsqueda scala idiomática, si una cadena dada contiene una subcadena dada?
- 19. ¿Eliminar subcadena de una cadena?
- 20. Pregunta simple de Linq: ¿Cómo seleccionar más de una columna?
- 21. MySQL - SELECCIONE todas las columnas DONDE una columna es DISTINCT
- 22. expresión regular no contiene la subcadena
- 23. sqlalchemy ORM: cómo declarar una clase de tabla que contiene una clave principal de varias columnas?
- 24. agregar columna a SQLAlchemy Tabla
- 25. No se puede agregar una relación anidada o una columna de elemento a una tabla que contiene una columna simpleContent
- 26. En Java, ¿cómo puedo verificar si una cadena contiene una subcadena (ignorando el caso)?
- 27. Compruebe si una cadena contiene una subcadena en SQL Server 2005, utilizando un procedimiento almacenado
- 28. SQL DONDE columna = todo
- 29. MySQL: seleccionar filas donde una columna es nula
- 30. ¿Cómo extraer una subcadena de .NET RegEx?
Puede decirnos la consulta en matraz de SQLAlchemy – Wally
@Wally matraz de SQLAlchemy es un paquete de conveniencia para conectar SQLAlchemy al matraz. Las consultas no cambian en comparación con SQLAlchemy Declarative. – Laogeodritt