Ich habe eine SQLite-Tabelle mit einer konstanten Anzahl von Zeilen. Aber während ich Werte erzeuge, die von einigen dieser Spalten abgeleitet sind (neue Features), möchte ich neben vorhandenen Spalten Spalten hinzufügen, ohne neue Zeilen zu erstellen. Ich kann eine Spalte mit ALTER TABLE
hinzufügen, aber Aufruf cur.executemany("INSERT INTO...")
bewirkt, dass die Werte in neuen Zeilen angehängt werden.Aktualisieren mehrerer Werte in einer SQLite-Spalte mit Python
Ich habe versucht:
cur.executemany("UPDATE DOS_APPENDIX SET FEATURE2=?", [(val,) for val in ["a", "b", "c"]])
Aus irgendeinem Grund dies die "c" führt über die Reihen 1, 2, 3 in der Spalte FEATURE2
dupliziert werden. Und es ist langsam auf einer großen Liste (~ 2 Millionen).
Gibt es eine Möglichkeit zum Massenupdate? Etwas so anmutig und schnell wie das Anrufen cur.executemany(INSERT INTO...)
?
Muss ich die Zeilen einzeln mit einer for
Schleife aktualisieren?
Wenn ja, wie würde ich dies tun, wenn ich keine WHERE
Bedingung (nur Zeilennummern) habe?
Hinweis: Die Erstellung einer parallelen Spalte neben einer vorhandenen Spalte erfolgt mit Nullwerten. Diese werden dann überschrieben.
Ich erwarte, dass 'UPDATE' länger dauert, weil es die Nullwerte überschreibt. Aber ich hatte gehofft, es würde nicht viel länger dauern als 'INSERT' (was schnell ist, sogar mit 2 Millionen Datensätzen). Vielleicht ist dies eine unkonventionelle Verwendung einer Datenbank (um ihre Struktur zu ändern), aber ich möchte die Werte neuer Funktionen speichern, während ich sie berechne. Ich werde versuchen, eine 'id' hinzuzufügen und vergleichen Sie diese relativ zu löschen und neu erstellen die Tabelle mit neuen Spalten. Vielen Dank. – zadrozny
Wenn Sie sagen, dass Sie nicht erwarten würden, dass es viel länger dauert - haben Sie versucht, die 2M Zeilen einzufügen? Wie viel Zeit hat es gedauert? – Dekel
Ja. Paar Sekunden höchstens. UPDATE wurde nach über einer Minute noch nicht ausgeführt und hat meinen Prozessor belastet, also habe ich ihn getötet. – zadrozny