J'essaye d'importer un fichier csv dans une table SQLite.
Exemple csv:
1,2
5,6
2,7
Exemple de commande:
sqlite> create table foo(a, b);
sqlite> .separator ,
sqlite> .import test.csv foo
Error: test.csv line 1: expected 2 columns of data but found 4
Je ne sais même pas pourquoi il trouverait quatre colonnes avec six éléments de données et deux colonnes.
6 - 2 = 4
\r\n
sur Windows,\n
sur * nix (inclut les nouveaux Mac),\r
sur les anciens Mac.Réponses:
Ce qui est également dit dans les commentaires, SQLite voit votre entrée comme 1, 25, 62, 7. J'ai également eu un problème avec, et dans mon cas, il a été résolu en changeant "séparateur" en ".mode csv". Vous pouvez donc essayer:
La première commande crée les noms de colonne de la table. Cependant, si vous souhaitez que les noms de colonne hérités du fichier csv, vous pouvez simplement ignorer la première ligne.
la source
create table
commande et sqlite utilisera les noms de colonnes du fichier csv.Year,Make,Model,Description,Price
et non les données réelles. Si tel est le cas avec votre fichier CSV, vous n'avez pas besoin de créer manuellement la table à l'aide de lacreate table
commande. La.import
commande utilisera la première ligne de votre fichier pour déterminer les noms de colonne et créer la table en conséquence. Vous devez toujours inclure le nom de la table dans la commande. Les mêmes informations de la documentation SQLite ..mode
? N'est-ce pas uniquement pour la sortie?type
pour un nom de colonne CSV.Voici comment je l'ai fait.
Entrez le shell sqlite de la base de données à laquelle les données doivent être ajoutées
sqlite> .separator "\t" ---IMPORTANT! should be in double quotes sqlite> .import afile.csv tablename-to-import-to
la source
.separator "\t" "\r"
Je fusionne ici les informations des réponses précédentes avec ma propre expérience. Le plus simple est d'ajouter les en-têtes de tableau séparés par des virgules directement à votre fichier csv, suivis d'une nouvelle ligne, puis de toutes vos données csv.
Si vous ne faites plus jamais de choses sur sqlite (comme moi), cela pourrait vous éviter une ou deux recherches sur le Web:
Dans le shell Sqlite, entrez:
Si vous n'avez pas installé Sqlite sur votre Mac, exécutez
Vous devrez peut-être effectuer une recherche sur le Web pour savoir comment installer Homebrew.
la source
unescaped " character
alertes?avant la commande .import, tapez ".mode csv"
la source
Comment importer un fichier csv dans sqlite3
Créer une base de données
Définir le mode et le nom de la table
Importez les données du fichier csv dans sqlite3
Trouver des tables
Trouvez votre schéma de table
Rechercher des données de table
Comptez le nombre de lignes dans le tableau
la source
Avec Termsql, vous pouvez le faire en une seule ligne:
termsql -i mycsvfile.CSV -d ',' -c 'a,b' -t 'foo' -o mynewdatabase.db
la source
J'ai eu exactement le même problème (sur OS X Maverics 10.9.1 avec SQLite3 3.7.13, mais je ne pense pas que SQLite soit lié à la cause). J'ai essayé d'importer des données csv enregistrées à partir de MS Excel 2011, qui d'ailleurs. utilise
';'
comme séparateur de colonnes. J'ai découvert que le fichier csv d'Excel utilise toujours le caractère de nouvelle ligne de Mac OS 9 fois, le changer en unix newline a résolu le problème. AFAIR BBEdit a une commande pour cela, ainsi que Sublime Text 2.la source
tr -s '\r' '\n'
et cela fonctionnera avec toutes sortes de fichiers aléatoires.Suis les étapes:-
la source
Comme certains sites Web et autres articles le spécifient, il suffit de jeter un coup d'œil à celui-ci. https://www.sqlitetutorial.net/sqlite-import-csv/
Nous n'avons pas besoin de spécifier le séparateur pour le
csv
fichier, car csv signifie séparé par des virgules.sqlite> .separator ,
pas besoin de cette ligne.Cela fonctionnera parfaitement :)
PS: Mes cities.csv avec en-tête.
la source
.save someFileName
à la fin. Il m'a fallu une heure pour le trouver pour enfin exporter ce fichier de base de données en mémoire sur le disque 😅