Por "Newdata is list of x columns", imagino que você queira dizer
x
tuplas , desde então você continua falando da "primeira tupla". Se Newdata
é uma lista de tuplas, y = len(Newdata[0])
é o número de itens na primeira dessas tuplas. Supondo que seja o número que você deseja (e todas as tuplas devem ter o mesmo número de itens, caso contrário
executemany
vai falha!), a ideia geral na resposta de @Nathan está certa:construa a string com o número apropriado de pontos de interrogação separados por vírgula:holders = ','.join('?' * y)
em seguida, insira-o no restante da instrução SQL. A maneira de inserir do @Nathan é correta para a maioria das versões do Python 2.any, mas se você tiver 2.6 ou melhor,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
é atualmente preferido (também funciona em Python 3.any).
Finalmente,
csr.executemany(sql, Newdata)
vai fazer o que você deseja. Lembre-se de confirmar a transação assim que terminar!-)