Przez „Nowe dane to lista x kolumn” wyobrażam sobie, że masz na myśli x
krotki , od tego czasu nadal mówisz o „pierwszej krotce”. Jeśli Newdata
to lista krotek, y = len(Newdata[0])
to liczba elementów w pierwszej z tych krotek.
Zakładając, że jest to liczba, którą chcesz (a wszystkie krotki powinny mieć taką samą liczbę elementów, w przeciwnym razie executemany
będzie nie powiodła się!), ogólna idea odpowiedzi @Nathana jest słuszna:zbuduj łańcuch z odpowiednią liczbą znaków zapytania oddzielonych przecinkami:
holders = ','.join('?' * y)
następnie wstaw go w pozostałej części instrukcji SQL. @Nathan sposób wstawiania jest odpowiedni dla większości wersji Pythona 2.any, ale jeśli masz 2.6 lub lepszą,
sql = 'INSERT INTO testdata VALUES({0})'.format(holders)
jest obecnie preferowany (działa również w Pythonie 3.any).
Wreszcie
csr.executemany(sql, Newdata)
zrobi to, czego pragniesz. Pamiętaj, aby zatwierdzić transakcję, gdy skończysz!-)