2010-12-08 18 views
9

Necesito una manera simple de exportar datos desde una base de datos SQLite de varias tablas, y luego importarlas a otra base de datos.Exportación de datos desde SQLite 3

Aquí está mi situación. Tengo 5 tablas: A, B, C, D, E.

Cada tabla tiene una clave principal como la primera columna llamada ID. Quiero un comando de Unix que arrojará SÓLO los datos en la fila desde la clave principal en un formato que pueda importarse a otra base de datos.

Sé que puedo hacer un

sqlite3 db .dump | grep INSERT 

pero eso me da todos los datos en la tabla. No soy un experto en bases de datos, y trato de hacer esto con todos los comandos de Unix en los que puedo escribir un script de shell, en lugar de escribir código C++ para hacerlo (porque eso es lo que la gente me dice que es la manera más fácil) . Me niego a escribir código C++ para realizar una tarea que se puede hacer en 4 a 5 instrucciones desde la línea de comandos.

¿Alguna sugerencia?

+0

Acabo de señalar ..... Hice un volcado de todos los datos e intenté importar a la misma base de datos. La clave principal debe ser única. ¿Entonces mi script necesitaría crear claves únicas? O si elimino la clave primaria y se configura para autoincrementar, ¿una operación de inserción generará una clave única? –

+0

Además, la estructura de la tabla donde se importarán los datos será la misma, y ​​tengo que exportar e importar todos los datos de las 5 tablas asociadas con la ID única. Entonces, si las 5 tablas tienen una ID única de 1 con columnas de datos, debo exportar eso a un archivo, luego importarlo a la misma estructura de tabla en otro sistema (los archivos de la base de datos existirán). –

Respuesta

2

Sugiera encontrar una herramienta que pueda tomar su consulta y exportarla a un archivo CSV. Parece que querías un guión. ¿Querías reutilizar y automatizar esto?

Para otros escenarios, quizás considere el sqlite-manager Firefox plugin. Admite la ejecución de consultas adhoc y la exportación de los resultados a un archivo CSV.

Dentro de eso, darle esta declaración:

SELECT ID FROM TableA 

Repetir para cada tabla como sea necesario.

+0

sqlite3 se volcará en CSV .... este no es mi problema, y ​​no puedo usar una herramienta de terceros. Es un sistema cerrado, destinado a usuarios únicos (no PC). El sistema usará Unix como sistema operativo, de ahí mi intento de encontrar soluciones de línea de comandos de Unix.Mi objetivo esencial es exportar basado en la clave primaria en un formato de archivo, luego llevar ese archivo a otro sistema similar e importar los datos en esa base de datos. –

0

También puede utilizar la función quote de SQLite.

echo "SELECT 'INSERT INTO my_new_table (my_new_key) VALUES (' || quote(my_old_key) || ');' FROM my_old_table;" | sqlite my_table > statements.sql 
+0

¿Puedes dar más explicaciones sobre 'quote'? – Zulu

11

Esto puede parecer un poco raro, sin embargo es posible darle una oportunidad:

Crear archivo de texto y el lugar tras las declaraciones allí:

.mode insert 
.output insert.sql 
select * from TABLE where STATEMENT; -- place the needed select query here 
.output stdout 

RSS este archivo para Sqlite3:

$ sqlite3 -init initf DATA.DB .schema > schema.sql 

Como resultado obtendrá dos archivos: uno con "inserciones" simples (inser) t.sql) y otro con esquema db (schema.sql).

+4

Sugiero incluir el nombre de la tabla al cambiar el modo: '.mode insert TABLE'. Esto hará que incluya el nombre de la tabla en las instrucciones de inserción generadas. – Brigham

Cuestiones relacionadas