2011-11-03 23 views
11

¿Hay alguna forma de utilizar marcadores de posición de longitud variable en una consulta SQL?Cómo obtener marcadores de posición de longitud variable en una llamada de Python a SQLite3

este momento con un 3-tupla, escribo algo como esto:

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

Pero ¿y si la maza puede ser de diferentes longitudes, tal vez un 4-tupla o 2-tupla? ¿Hay una sintaxis para usar marcadores de posición en esta situación? Si no, ¿cuál es la forma preferida de escribir el código?

Respuesta

12

Habría que hacer algo como esto (para usar el ejemplo):

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

De esta manera se está creando dinámicamente la lista de marcador de posición y el formato de la cadena SQL antes de que el módulo de sqlite3 analiza a cabo.

+0

¿Había esperado que hubiera ?? o? variante para este tipo de cosas, pero su sugerencia será muy útil. –

+3

Escribiría '',' .join ('?' Para a en tup)' como '',' .join ('?' * Len (tup))' – Duncan

+3

@Duncan: Idunno que me parece menos claro más ruido de señal. La comprensión del generador parece leer más como inglés – rossipedia

Cuestiones relacionadas