Solución para @umounted respuesta, debido a que rompieron con una tupla de un solo elemento, ya que (1,) no es válida SQL .:
>>> random_ids = [1234,123,54,56,57,58,78,91]
>>> cursor.execute("create table test (id)")
>>> for item in random_ids:
cursor.execute("insert into test values (%d)" % item)
>>> sublist = [56,57,58]
>>> cursor.execute("select id from test where id in %s" % str(tuple(sublist)).replace(',)',')'))
>>> a = cursor.fetchall()
>>> a
[(56,), (57,), (58,)]
otra solución para la cadena SQL:
cursor.execute("select id from test where id in (%s)" % ('"'+'", "'.join(l)+'"'))
'','. join (marcador de posición * len (l))' sería un poco más corto mientras aún es legible imho – ThiefMaster
@Thiefmaster: sí, tendría que ser '([placeholder] * len (l)) 'en el caso general, ya que el marcador de posición puede tener múltiples caracteres. – bobince
@bobince en mi caso he asignado una variable a = 'john' yb = 'nieve' y la he almacenado en una tupla con el nombre get = ['a, b'] y realicé la misma consulta. Al hacer esto, obtuve el erroy, es decir, Error de tipo: no todos los argumentos se convirtieron durante el formateo de cadenas. ¿Cómo se supone que lo solfeo? – TechJhola