2012-09-14 9 views
10

Estoy creando una interfaz en Flask con SQLAlchemy y parte de ella es una API de búsqueda. Esencialmente una entrada de escritura anticipada está llamando al servidor con su valor (por ejemplo, un correo electrónico) y luego el servidor está realizando una consulta sqlalchemy usando .like en un filtro, como a continuaciónCómo se pasan las cadenas al método .like() de SQLAlchemy

q = session.query(User).filter(User.email.like('%'+term+'%')).all() 

Esta consulta no es realmente volviendo algo útil y después de los primeros personajes, nada en absoluto. Pero si realizo la misma consulta con el término hardcoded, así:

q = session.query(User).filter(User.email.like('%mysearchterm%')).all() 

le proporcione resultados perfectamente bien, así que hay algo con lo que estoy poniendo el término en el método como() pero realmente puede No entiendo cuál es el problema. El término viene de un POST ajax y el valor está allí en el lado del servidor, simplemente .like() no lo está utilizando correctamente.

Por "nada útil" quiero decir que los primeros juegos de resultados que vuelven no tienen nada que ver con el término real ingresado, después de un término de longitud superior a 3-4 no se devuelven resultados a pesar de los elementos coincidentes existentes en el DB.

Cualquier ayuda muy apreciada.

+1

¿Estás SEGURO de que el término es el que esperas? Si crea la cadena similar '%' + término + '%' en una variable e imprime la variable, ¿está obteniendo lo que esperaba? Además, ¿qué significa "Esta consulta realmente no devuelve nada útil" significa? Finalmente, considere [activar el registro] (http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html#configuring-logging) y vea qué es realmente el SQL generado. –

+0

En el método dentro de mi aplicación de matraz, estoy imprimiendo el término antes de que se ejecute la consulta y puedo ver el término emergente en mi consola para que el término entre en la función. Solo intenté imprimir '%' + término '%' y su resultado% myterm% en la consola también. Al decir que no es realmente útil, me refiero a que los primeros conjuntos de resultados que vuelven no tienen nada que ver con el término, después de abotu 3-4 caracteres, no se devuelven resultados. – jduren

Respuesta

7

Se han resuelto los problemas. Esta consulta se encontraba dentro de una función de generador de consultas más grande que aplicaba límite y desplazamiento a la consulta más adelante en la función, porque el límite y el desplazamiento eran más altos que la cantidad de resultados que el conjunto de resultados devuelto estaba vacío.

Puede calzar este hasta un mal error humano y la falta de sueño.

Cuestiones relacionadas