Per "Newdata è un elenco di x colonne", immagino tu intenda x
tuple , da allora si continua a parlare di "prima tupla". Se Newdata
è un elenco di tuple, y = len(Newdata[0])
è il numero di elementi nella prima di quelle tuple.
Supponendo che sia il numero che desideri (e tutte le tuple dovrebbero avere lo stesso numero di elementi, altrimenti executemany
farà fallisci!), l'idea generale nella risposta di @Nathan è giusta:costruisci la stringa con il numero appropriato di punti interrogativi separati da virgole:
holders = ','.join('?' * y)
quindi inserirlo nel resto dell'istruzione SQL. Il modo di inserire di @Nathan è giusto per la maggior parte delle versioni di Python 2.any, ma se hai 2.6 o superiore,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
è attualmente preferito (funziona anche in Python 3.any).
Infine,
csr.executemany(sql, Newdata)
farà quello che desideri. Ricordati di confermare la transazione una volta che hai finito!-)