By "Newdata is list of x columns", I imagine you mean x
tuples, since then you continue to speak of "the first tuple". If Newdata
is a list of tuples, y = len(Newdata[0])
is the number of items in the first one of those tuples.
Assuming that's the number you want (and all tuples had better have the same number of items, otherwise executemany
will fail!), the general idea in @Nathan's answer is right: build the string with the appropriate number of comma-separated question marks:
holders = ','.join('?' * y)
then insert it in the rest of the SQL statement. @Nathan's way to insert is right for most Python 2.any versions, but if you have 2.6 or better,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
is currently preferred (it also works in Python 3.any).
Finally,
csr.executemany(sql, Newdata)
will do what you desire. Remember to commit the transaction once you're done!-)