Estoy tratando de cargar a granel una gran cantidad de datos (5.5 millones de filas) en un archivo de base de datos SQLite. La carga a través de INSERT parece ser demasiado lenta, así que estoy tratando de usar la herramienta de línea de comandos sqlite3 y el comando .import.¿Cómo automatizar un proceso con la herramienta de línea de comandos sqlite3.exe?
Funciona a la perfección si ingreso los comandos a mano, pero no puedo por la forma de automatizarlo desde un script (archivo .bat o script de python; estoy trabajando en una máquina con Windows)
Los comandos que tema en la línea de comandos son los siguientes:
> sqlite3 database.db
sqlite> CREATE TABLE log_entry (<snip>);
sqlite> .separator "\t"
sqlite> .import logfile.log log_entry
Pero nada se trato conseguir que esto funcione desde un archivo de murciélago o script en Python.
He estado tratando de cosas como:
sqlite3 "database.db" .separator "\t" .import logfile.log log_entry
echo '.separator "\t" .import logfile.log log_entry' | sqlite3 database.db
Seguramente me puede hacer esto de alguna manera?
¿Qué tan lenta es su carga a través de INSERT? Inserté 15 millones de filas grandes en Sqlite en 12 minutos con instrucciones de inserción. Debe usar transacciones y declaraciones preparadas. – tuinstoel
Muy lento. Estoy usando python para analizar un archivo de registro e insertar cada línea como una fila. No estoy usando declaraciones preparadas, pero estoy usando transacciones. Aún así, es mucho más rápido hacer esto usando el programa sqlite3. – dave
Usar declaraciones preparadas hace una diferencia descomunal. Puedo crear una base de datos sqlite de dos gigabytes (1 gran tabla con 1 índice) en 12 minutos con INSERT en una PC estándar. – tuinstoel