Pregunta

Si es NewData lista de columnas x, ¿cómo obtener las columnas de números únicos - número de miembros de la primera tupla. (Len no es importante.) Cambiar el número de "?" para que coincida con las columnas y la inserción mediante la instrucción a continuación.

csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
¿Fue útil?

Solución

Por "lista de columnas x NewData es", me imagino que x media tuplas , ya continuación, seguir hablando de "la primera tupla". Si Newdata es una lista de tuplas, y = len(Newdata[0]) es el número de elementos en la primera de esas tuplas.

Si se asume que es el número que desea (y todas las tuplas había tener mejor el mismo número de elementos, de lo contrario executemany fallar!), La idea general de @ respuesta de Nathan es correcta: Él construye la cadena con el número apropiado de signos de interrogación separados por comas:

holders = ','.join('?' * y)

A continuación, insertarlo en el resto de la instrucción SQL. @ Camino de Nathan de inserción es adecuado para la mayoría de las versiones 2.any Python, pero si usted tiene 2.6 o mejor,

sql = 'INSERT INTO testdata VALUES({0})'.format(holders)

se prefiere actualmente (que también funciona en Python 3.any).

Por último,

csr.executemany(sql, Newdata)

hará lo que usted desea. Recuerde que debe confirmar la transacción una vez que haya terminado! -)

Otros consejos

Si usted está buscando el número máximo de elementos de todos los elementos en Newdata, es simplemente:

num_columns = max(len(t) for t in Newdata)

Esto, por supuesto, asume pitón 2,5 o mayor.

No es que yo estoy seguro de lo que está intentando funcionaría, pero se convertiría entonces en la instrucción de inserción:

sql = "INSERT INTO VALORES test.data (% s)" % "". Join (núm_columnas '?' *)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top