Por "Newdata es una lista de x columnas", imagino que te refieres a x
tuplas , desde entonces sigues 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.
Suponiendo que ese es el número que desea (y todas las tuplas deberían tener la misma cantidad de elementos, de lo contrario executemany
voluntad ¡falla!), la idea general en la respuesta de @Nathan es correcta:construye la cadena con el número apropiado de signos de interrogación separados por comas:
holders = ','.join('?' * y)
luego insértelo en el resto de la instrucción SQL. La forma de inserción de @Nathan es adecuada para la mayoría de las versiones de Python 2.cualquier versión, pero si tiene 2.6 o superior,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
actualmente se prefiere (también funciona en Python 3.any).
Finalmente,
csr.executemany(sql, Newdata)
hará lo que desees. ¡Recuerde confirmar la transacción una vez que haya terminado!-)