2011-11-03 7 views
11

Esiste un modo per utilizzare segnaposti di lunghezza variabile in una query SQL?Come ottenere segnaposti di lunghezza variabile in una chiamata Python a SQLite3

In questo momento con un 3-tuple, scrivo qualcosa di simile:

c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup) 

Ma cosa succede se il mazza può essere di diverse lunghezze, forse un 4 parametri o 2-tupla? C'è una sintassi per l'utilizzo di segnaposto in questa situazione? In caso contrario, qual è il modo preferito per scrivere il codice?

risposta

12

dovreste fare qualcosa di simile (per usare il tuo esempio):

tup = ... # some sequence/tuple of unknown length 
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup) 
c.execute(sql, tup) 

In questo modo si sta creando dinamicamente la lista segnaposto e la formattazione della stringa SQL prima che il modulo sqlite3 analizza fuori.

+0

avevo sperato ci fosse ?? o? * variante per questo genere di cose, ma il tuo suggerimento andrà bene. –

+3

Scriverò '',' .join ('?' Per un in tup)' come '',' .join ('?' * Len (tup))' – Duncan

+3

@Duncan: Idunno che mi sembra meno chiaro più rumore del segnale. La comprensione del generatore sembra più simile all'inglese – rossipedia

Problemi correlati