Met "Nieuwe gegevens is een lijst met x kolommen", neem ik aan dat je x
. bedoelt tupels , sindsdien blijf je spreken van "de eerste tuple". Als Newdata
is een lijst met tupels, y = len(Newdata[0])
is het aantal items in de eerste van die tuples.
Ervan uitgaande dat dit het gewenste aantal is (en alle tuples kunnen maar beter hetzelfde aantal items hebben, anders executemany
zal mislukken!), is het algemene idee in @Nathan's antwoord juist:bouw de string met het juiste aantal door komma's gescheiden vraagtekens:
holders = ','.join('?' * y)
voeg het vervolgens in de rest van de SQL-instructie in. De manier van @Nathan om in te voegen is geschikt voor de meeste Python 2.alle versies, maar als je 2.6 of beter hebt,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
heeft momenteel de voorkeur (het werkt ook in Python 3.any).
Eindelijk,
csr.executemany(sql, Newdata)
zal doen wat je wenst. Vergeet niet om de transactie vast te leggen zodra u klaar bent!-)