"Newdata - это список из x столбцов", я полагаю, вы имеете в виду x
кортежей , с тех пор вы продолжаете говорить о "первом кортеже".Если Newdata
- это список кортежей, y = len(Newdata[0])
- это количество элементов в первом из этих кортежей.
Предполагается, что это число, которое вы хотите (и все кортежи должны иметь одинаковое количество элементовиначе executemany
потерпит неудачу !), общая идея в ответе @ Натана верна: создайте строку с соответствующим количеством запятых, разделенных запятыми:
holders = ','.join('?' * y)
затемвставьте его в остальную часть оператора SQL.Способ @ Nathan для вставки подходит для большинства версий Python 2.any, но если у вас версия 2.6 или выше,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
в настоящее время предпочтительнее (это также работает в Python 3.any).
Наконец,
csr.executemany(sql, Newdata)
будет делать то, что вы хотите.Не забудьте совершить транзакцию, как только вы закончите! -)