Consulta SQLAlchemy donde una columna contiene una subcadena

Estoy construyendo una consulta utilizando SQLAlchemy y SQLite3 en el que me gustaría seleccionar filas en las que una columna de cadena contiene una subcadena particular. Cuál es la mejor manera de lograr esto?

Filtrar por db.table.column.like('%needle%') . También existe una búsqueda insensible a mayúsculas y minúsculas.

Para una interfaz más elegante puede permitir los comodines conocidos “dir”.

 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:

  • db.table.filter y db.table.column es para SQLSoup ( SQLSoup es útil si la base de datos fue creada 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 todo el poder del SQL en bruto sin tener que componer sentencias a mano mediante la interpolación de cadenas (utilícela junto con SQLSoup para la introspección, por lo que no necesita declarar tablas)
  • para SQLAlchemy Declarative (el que se usa en Flask) es Model.query.filter(Model.field.ilike(expr))

Prueba esto

 Model.query.filter(Model.columnName.contains('sub_string')) 

Si bien table.c.column.like("%...%") debería funcionar, hay una forma más directa de decir lo que quiere:

 table.c.column.contains("needle") 

Esto generalmente generará la misma consulta SQL, pero es mejor leer para los no iniciados. Tenga en cuenta que parece que contiene no se escapa “_” y “%” .

 @app.route('/', methods=['GET']) def getdb(var): look_for = '%{0}%'.format(var) log1 = table.query.filter(table.col.like(look_for)) 

He usado SQLAlchemy y Flask (app.ruta en la parte superior es un decorador). Usé la API get para tomar la variable que el usuario desea buscar y la estoy convirtiendo para almacenarla en otra variable llamada look_for (ya que var no se puede usar directamente en la consulta) usando el formato () y log1 almacena las tuplas consultadas.