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
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
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>