/ / Wie funktioniert executemany () - sqlite, executemany

Wie funktioniert executemany () - sqlite, executemany

Ich habe c ++ verwendet und arbeite mit sqlite. In Python habe ich eine ausführende Operation in der Bibliothek, aber die von mir verwendete C ++ - Bibliothek hat diese Operation nicht.

Ich habe mich gefragt, wie der Ausführungsvorgang Abfragen optimiert, um sie schneller zu machen.

Ich habe mir die sqlite c / c ++ - API angesehen und sah, dass es zwei Befehle gab, nämlich sqlite3_reset und sqlite3_clear_bindings, mit denen vorbereitete Anweisungen gelöscht und wiederverwendet werden können.

Ist es das, was Python für das Batch und die Beschleunigung von Abfragen ausführt (zumindest für Einfügungen)? Vielen Dank für Ihre Zeit.

Antworten:

2 für die Antwort № 1

executemany bindet einfach die Parameter, führt die Anweisungen aus und ruft Aufrufe auf sqlite3_resetin einer Schleife.

Python gibt Ihnen keinen direkten Zugriff auf dieAussage, nachdem es vorbereitet wurde, so ist es die einzige Möglichkeit, es wiederzuverwenden. SQLite benötigt jedoch nicht viel Zeit für die Erstellung von Anweisungen. Daher ist es unwahrscheinlich, dass dies Auswirkungen auf die Leistung hat.

Das wichtigste für die Leistung ist das Batch-Statement in einer Transaktion. Python versucht klug zu sein dies automatisch zu tun (unabhängig von executemany).


0 für die Antwort № 2

Ich habe einige der verwandten Beiträge durchgesehen und gefundenIm Folgenden wurde ausführlich beschrieben, wie die Leistung von sqlite-Batchinserts verbessert werden kann. Diese Prinzipien könnten effektiv zur Erstellung einer ausführenden Funktion verwendet werden.

Verbesserung der INSERT-per-second-Leistung von SQLite?

Die größten Verbesserungen waren in der Tat so@CL. sagte und verwandelte alles in eine Transaktion. Der Autor des anderen Postings fand auch eine bedeutende Verbesserung, indem er vorbereitete Aussagen verwendet und wiederverwendet und mit einigen Pragma-Einstellungen spielt.