Mit Python schnellen Einsatz viele Spalten in SQLite \ Mysql
-
03-10-2019 - |
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()
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)