2010-06-23 12 views
27

Sto tentando di utilizzare una parametrizzata come espressione di ricerca con la libreria SQLite di Python, come di seguito:Python SQLite parametro sostituzione con caratteri jolly in Come

self.cursor.execute("select string from stringtable where string like '%?%' and type = ?", (searchstr,type)) 

ma il? all'interno del jolly non è in corso di valutazione lasciandomi con questo errore:

"sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied." 

Ho anche cercato di utilizzare la versione tag di interrogazione con:

like '%:searchstr%' e nell'elenco avere {"searchstr":searchstr...

ma quando Io faccio che la query viene eseguita ma non restituisce mai risultati anche se inserendo manualmente "like '%a%'"... restituisci centinaia di risultati come dovrebbe

qualche suggerimento per favore?

risposta

53

Le virgolette proteggono ? o :name da prendere come segnaposto - sono prese alla lettera. È necessario posizionare i segni di percentuale attorno alla stringa che si sta passando e utilizzare il segnaposto semplice senza virgolette. Cioè .:

self.cursor.execute(
    "select string from stringtable where string like ? and type = ?", 
    ('%'+searchstr+'%', type)) 

Nota che né ? è tra virgolette - e questo è esattamente come dovrebbe essere per loro di essere presi come segnaposto.

+0

grazie mille! quello lo ha riparato! – atcuno

+0

@huntler, sempre felice di aiutare! –

+0

Python ha un parsing di variabili simile a PHP tra virgolette? per esempio. '" $ var "' in PHP analizzerebbe il valore di '$ var' racchiuso tra virgolette. –