2012-09-14 8 views
10

Sto costruendo un'interfaccia su Flask utilizzando SQLAlchemy e parte di esso è un'API di ricerca. Essenzialmente un ingresso type-ahead sta chiamando il server con il suo valore (ad esempio una e-mail) e quindi il server sta eseguendo una query utilizzando SQLAlchemy .like in un filtro come qui di seguitoCome vengono passate le stringhe al metodo .like() di SQLAlchemy

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

Questa interrogazione non è realmente tornando qualsiasi cosa utile e dopo i primi caratteri, niente di niente. Ma se mi esibisco la stessa query con il termine hardcoded, in questo modo:

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

restituisca risultati perfettamente bene, quindi c'è qualcosa di come sto mettendo il termine nel metodo come(), ma ho davvero possibile capisco qual è il problema Il termine proviene da un POST ajax e il valore è lì sul lato server, solo .like() non lo sta usando correttamente.

Con "nulla di utile" intendo che i primi gruppi di risultati non hanno nulla a che fare con il termine effettivo immesso, dopo un periodo di durata superiore a 3-4 nessun risultato viene restituito nonostante gli elementi corrispondenti esistenti in il DB.

Qualsiasi aiuto molto apprezzato.

+1

Sei sicuro che il termine è quello che ti aspetti? Se crei la stringa simile '%' + term + '%' in una variabile e stampi la variabile, ottieni ciò che ti aspetti? Inoltre, che cosa significa "Questa query non restituisce davvero nulla di utile"? Infine, prendi in considerazione [accendere la registrazione] (http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html#configuring-logging) e vedere cosa è effettivamente generato da SQL. –

+0

Nel metodo all'interno della mia app flacone sto stampando il termine prima che la query venga eseguita e posso vedere il termine pop-up nella mia console in modo che il termine lo stia inserendo nella funzione. Ho appena provato a stampare '%' + term '%' e il suo output% myterm% nella console. Per non molto utile intendo che i primi gruppi di risultati che ritornano non hanno nulla a che fare con il termine, dopo aver inserito 3-4 caratteri, non vengono restituiti risultati. – jduren

risposta

7

Problemi risolti. Questa query si trovava all'interno di una funzione di Generatore di query più grande che applicava il limite e l'offset alla query più avanti nella funzione, poiché il limite e l'offset erano superiori alla quantità di risultati che il set di risultati restituito era vuoto.

Si può bloccare questo errore umano e la mancanza di sonno.

Problemi correlati