GNU/Linux >> Tutoriels Linux >  >> Linux

Comment insérer des données CSV dans une table Sqlite via un Shell Pipe ?

J'ai écrit un programme qui affiche le résultat sur la sortie standard sous une forme CSV pure et stricte (chaque ligne représente un seul enregistrement et contient le même ensemble de champs séparés par des virgules, les champs ne contiennent que des lettres anglaises minuscules, des chiffres et des points, pas d'espaces, pas de guillemets ni de symboles qui pourraient avoir besoin d'être échappés/encodés).

Comment rediriger cette sortie vers une table SQLite dans laquelle elle s'intègre parfaitement ?

Ce serait formidable si je pouvais contrôler si je veux que la rupture de contrainte (par exemple, avoir la même clé primaire/secondaire que les enregistrements déjà dans la table) remplace les enregistrements existants ou soit supprimée en silence.

Bien sûr, je pourrais créer un support direct de sortie de base de données SQLite dans le programme lui-même, mais je préférerais suivre la voie unix si possible.

Réponse acceptée :

Deux approches :

Exemple test.csv fichier :

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 ) Avec csvkit (une suite d'outils en ligne de commande pour convertir et travailler avec CSV)

Importer dans sqlite3 base de données :

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

Si aucun fichier csv d'entrée n'a été spécifié, il acceptera les données csv de stdin :

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

Pour extraire des données de sqlite base de données :

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

La sortie :

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

2 ) Avec sqlite3 outil de ligne de commande (permet à l'utilisateur d'entrer et d'exécuter manuellement des instructions SQL sur un SQLite base de données)

Utilisez le ".import ” pour importer des données CSV (valeurs séparées par des virgules)
dans une table SQLite. Le ".import ” prend deux arguments qui
sont le nom du fichier disque à partir duquel les données CSV doivent être lues et
le nom de la table SQLite dans laquelle les données CSV doivent être
insérées.

Notez qu'il est important de définir le "mode" sur "csv" avant d'exécuter
le ".import " commande. Cela est nécessaire pour empêcher le shell de ligne de commande
d'essayer d'interpréter le texte du fichier d'entrée comme un autre
format.

$ 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. Lire des valeurs dans une variable shell à partir d'un tube

  2. Comment envoyer des paquets multicast via une interface spécifique sous Linux

  3. Comment insérer une nouvelle ligne dans le script shell Linux ?

  4. À l'aide de la commande cp dans le shell Linux, comment copier un répertoire entier dans un autre répertoire ?

  5. Comment démarrer en bash lorsque je me connecte en ssh à mon serveur ?

Comment exporter une table de MySQL vers CSV

Comment insérer des données dans la base de données MySQL à l'aide de PHP dans XAMPP

Comment exécuter des commandes Shell via un serveur HTTP

Comment surveiller la progression des données dans un tube à l'aide de la commande "pv"

Comment écrire des données dans un fichier sous Linux

Comment importer des données dans Apache Solr