GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo insertar datos Csv en una tabla Sqlite a través de una tubería Shell?

Escribí un programa que envía el resultado a la salida estándar en formato CSV puro estricto (cada línea representa un solo registro y contiene el mismo conjunto de campos separados por comas, los campos solo contienen letras minúsculas en inglés, números y puntos, sin espacios, sin comillas ni símbolos que deban escaparse o codificarse).

¿Cómo redirijo esta salida a una tabla SQLite en la que encaje perfectamente?

Sería genial si pudiera controlar si quiero romper las restricciones (por ejemplo, tener la misma clave primaria/secundaria que los registros que ya están en la tabla) reemplazar los registros existentes o descartarlos silenciosamente.

Por supuesto, podría crear compatibilidad directa con la salida de la base de datos SQLite en el propio programa, pero preferiría seguir el camino de Unix si es posible.

Respuesta aceptada:

Dos enfoques:

Muestra test.csv archivo:

GroupName,Groupcode,GroupOwner,GroupCategoryID 
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102
Liberty Elementary Teachers,Elem Teachers,13559,103
1st Grade Teachers,1stgrade,,104
2nd Grade Teachers,2nsgrade,13561,105
3rd Grade Teachers,3rdgrade,13562,106
Guidance Department,guidance,,107

1 ) Con csvkit (un conjunto de herramientas de línea de comandos para convertir y trabajar con CSV)

Importar a sqlite3 base de datos:

csvsql --db sqlite:///test_db --tables test_tbl --insert test.csv

Si no se especificó ningún archivo csv de entrada, aceptará datos csv de stdin:

... | csvsql --db sqlite:///test_db --tables test_tbl --insert

Para extraer datos de sqlite base de datos:

sql2csv --db sqlite:///test_db --query 'select * from test_tbl limit 3'

La salida:

GroupName,Groupcode,GroupOwner,GroupCategoryID 
System Administrators,sysadmin,13456,100
Independence High Teachers,HS Teachers,,101
John Glenn Middle Teachers,MS Teachers,13458,102

2 ) Con sqlite3 herramienta de línea de comandos (permite al usuario ingresar y ejecutar manualmente sentencias SQL contra un SQLite base de datos)

Utilice el “.import ” para importar datos CSV (valores separados por comas)
en una tabla SQLite. El “.import El comando ” toma dos argumentos que
son el nombre del archivo de disco desde el cual se leerán los datos CSV y
el nombre de la tabla SQLite en la que se insertarán los datos CSV
.

Tenga en cuenta que es importante establecer el "modo" en "csv" antes de ejecutar
el ".import " dominio. Esto es necesario para evitar que el shell de la línea de comandos
intente interpretar el texto del archivo de entrada como algún otro
formato.

$ sqlite3
sqlite> .mode csv
sqlite> .import test.csv test_tbl
sqlite> select GroupName,Groupcode from test_tbl limit 5;
"System Administrators",sysadmin
"Independence High Teachers","HS Teachers"
"John Glenn Middle Teachers","MS Teachers"
"Liberty Elementary Teachers","Elem Teachers"
"1st Grade Teachers",1stgrade
sqlite> 

Linux
  1. Leer valores en una variable de shell desde una tubería

  2. Cómo enviar paquetes de multidifusión a través de una interfaz específica en Linux

  3. ¿Cómo inserto un carácter de tabulación en Iterm?

  4. Usando el comando cp en Linux Shell, ¿cómo copio un directorio completo en otro directorio?

  5. ¿Cómo empiezo en bash cuando hago ssh en mi servidor?

Cómo exportar una tabla de MySQL a CSV

Cómo insertar datos en la base de datos MySQL usando PHP en XAMPP

Cómo ejecutar comandos de Shell a través del servidor HTTP

Cómo monitorear el progreso de los datos a través de una tubería usando el comando 'pv'

Cómo escribir datos en un archivo en Linux

Cómo importar datos en Apache Solr