Ich versuche, 1000er Zeilen in SQLite3 mit insert einzugeben, aber die Zeit, die zum Einfügen benötigt wird, ist viel zu lang. Ich habe gehört, Geschwindigkeit ist stark erhöht, wenn die Einsätze zu einer Transaktion kombiniert werden. Allerdings kann ich SQlite3 anscheinend nicht überspringen, um zu überprüfen, dass die Datei auf der Festplatte geschrieben ist.
Dies ist ein Beispiel:
%Vor%Das habe ich am Anfang.
%Vor%Es scheint jedoch keinen Unterschied zu machen. Ein Weg, um die Geschwindigkeit der Wendeplatte zu erhöhen, wäre sehr willkommen.
Laut Sqlite-Dokumentation sollte BEGIN
transaction mit COMMIT
Transaktionen können manuell mit dem Befehl BEGIN gestartet werden. Eine solche Transaktionen bleiben normalerweise bis zum nächsten COMMIT oder ROLLBACK bestehen Befehl. Aber eine Transaktion wird auch ROLLBACK, wenn die Datenbank ist geschlossen oder wenn ein Fehler auftritt und die ROLLBACK Konfliktlösung Algorithmus ist angegeben. Siehe die Dokumentation zum ON CONFLICT Klausel für zusätzliche Informationen zum ROLLBACK-Konflikt Auflösungsalgorithmus.
Der Code sollte also so aussehen:
%Vor%(Falls jemand noch eine Antwort darauf sucht)
Sie sollten Executemany verwenden, wenn Sie nur einige tausend Inserts nacheinander ausführen.
Sehen Sie sich Was ist der optimierte Weg, um eine große Anzahl von Datensätzen (mehr als 40.000) in sqlite3 einzufügen
?Ich habe gerade mit einem LOT (Auftrag Millionen) von Executes gekämpft, die ungefähr 30 Minuten zur Vollendung benötigten - geschalten zu executemany und ich habe es jetzt unten zu ungefähr 10 Minuten.
Sie können Executemany verwenden, sehen Sie sich diese SO-Frage an: python sqlite question - Methode einfügen
Tags und Links python insert transactions sqlite3