Med "Nye data er liste over x kolonner", forestiller jeg mig, at du mener x
tupler , siden fortsætter du med at tale om "den første tuple". Hvis Newdata
er en liste over tupler, y = len(Newdata[0])
er antallet af genstande i den første af disse tupler.
Forudsat at det er det antal, du ønsker (og alle tupler må hellere have det samme antal elementer, ellers executemany
vil mislykkes!), er den generelle idé i @Nathans svar rigtig:byg strengen med det passende antal kommaseparerede spørgsmålstegn:
holders = ','.join('?' * y)
indsæt det derefter i resten af SQL-sætningen. @Nathans måde at indsætte på er rigtig for de fleste Python 2. enhver version, men hvis du har 2.6 eller bedre,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
er i øjeblikket foretrukket (det virker også i Python 3.any).
Endelig,
csr.executemany(sql, Newdata)
vil gøre hvad du ønsker. Husk at foretage transaktionen, når du er færdig!-)