Frage

Wenn Newdata ist die Liste der x Spalten, Wie würden Sie die Anzahl eindeutige Spalten bekommen - Anzahl der Mitglieder des ersten Tupels. (Len ist nicht wichtig.) Ändern Sie die Anzahl der „?“ Spalten und Insert mit der Anweisung unten anzupassen.

csr = con.cursor()
csr.execute('Truncate table test.data')
csr.executemany('INSERT INTO test.data VALUES (?,?,?,?)', Newdata)
con.commit()
War es hilfreich?

Lösung

Mit dem „Newdata ist die Liste der x Spalten“, ich denke, Sie mittlere x Tupeln , seitdem Sie auch weiterhin von „ersten Tupel“ zu sprechen. Wenn Newdata eine Liste von Tupeln ist, y = len(Newdata[0]) ist die Anzahl der Elemente in dem ersten dieser Tupel.

Unter der Annahme, das ist die Zahl, die Sie wollen (und alle Tupel besser die gleiche Anzahl von Elementen haben hatten, sonst executemany wird nicht!), Die allgemeine Idee in @ Antwort Nathans ist richtig: build die Zeichenfolge mit die entsprechende Anzahl von durch Kommata getrennte Fragezeichen:

holders = ','.join('?' * y)

setzen Sie sie dann in den Rest der SQL-Anweisung. @ Nathans Weg zum Einsatz richtig ist für die meisten Python 2.any Versionen, aber wenn man 2,6 oder besser,

sql = 'INSERT INTO testdata VALUES({0})'.format(holders)

ist derzeit bevorzugt (es funktioniert auch in Python 3.any).

Schließlich

csr.executemany(sql, Newdata)

wird tun, was Sie sich wünschen. Denken Sie daran, um die Transaktion zu begehen, wenn Sie fertig sind! -)

Andere Tipps

Wenn Sie sich für die maximale Anzahl von Elementen in allen Elementen in Newdata suchen, es ist einfach:

num_columns = max(len(t) for t in Newdata)

Das ist natürlich nimmt Python 2.5 oder höher.

Nicht, dass ich sicher, was Sie funktionieren wird, sind versucht, aber die Insert-Anweisung wäre dann:

sql = "INSERT INTO test.data VALUES (% s)" % "". Join ( '?' * Num_columns)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top