Comment importer de la charge d'un.sql ou.fichier csv dans SQLite?
il me faut un .sql ou .csv fichier dans SQLite (j'utilise L'API SQLite3). J'ai seulement trouvé de la documentation pour importer/charger des tables, pas des bases de données entières. Maintenant, quand je tape:
sqlite3prompt> .import FILENAME TABLE
j'obtiens une erreur de syntaxe, puisqu'il attend une table et pas un DB entier.
11 réponses
pour importer à partir D'un fichier SQL utilisez ce qui suit:
sqlite> .read <filename>
pour importer à partir D'un fichier CSV, vous devrez spécifier le type de fichier et la table de destination:
sqlite> .mode csv <table>
sqlite> .import <filename> <table>
essayez de le faire à partir de la commande comme:
cat dump.sql | sqlite3 database.db
cela ne fonctionnera évidemment qu'avec des instructions SQL dans dump.SQL. Je ne sais pas comment importer un CSV.
Pour passer de ZÉRO avec SQLite DB à l'importation d'un fichier CSV dans une table:
- Obtenir SQLite à partir du site web.
- à un invite de commande, Lancez
sqlite3 <your_db_file_name>
*il sera créé comme un fichier vide. - faites une nouvelle table dans votre nouvelle base de données. La table doit correspondre à vos champs CSV pour l'importation.
- vous faites ceci par la commande SQL:
CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);
une fois que vous avez le table créée et les colonnes correspondent à vos données à partir du fichier, vous pouvez le faire ci-dessus...
.mode csv <table_name>
.import <filename> <table_name>
Le sqlite3 .la commande Importer ne fonctionnera pas pour les données csv ordinaires parce qu'elle traite n'importe quelle virgule comme un délimiteur même dans une chaîne Citée.
cela comprend essayer de réimporter un fichier csv qui a été créé par le shell:
Create table T (F1 integer, F2 varchar);
Insert into T values (1, 'Hey!');
Insert into T values (2, 'Hey, You!');
.mode csv
.output test.csv
select * from T;
Contents of test.csv:
1,Hey!
2,"Hey, You!"
delete from T;
.import test.csv T
Error: test.csv line 2: expected 2 columns of data but found 3
il semble que nous devons transformer la csv en une liste D'insertions, ou peut-être un délimiteur différent fonctionnera.
chez SuperUser j'ai vu une suggestion d'utiliser LogParser pour traiter avec les fichiers csv, je vais regarder ça.
si vous êtes heureux d'utiliser un script (python) alors il y a un script python qui automatise ceci à: https://github.com/rgrp/csv2sqlite
cela va auto-créer la table pour vous aussi bien que de faire un type de base-deviner et le moulage de données pour vous (donc par exemple, il va travailler quelque chose est un nombre et mettre le type de colonne à"réel").
N'oubliez pas que le délimiteur par défaut pour SQLite est la pipe " / "
sqlite> .separator ";"
sqlite> .import path/filename.txt tablename
http://sqlite.awardspace.info/syntax/sqlitepg01.htm#sqlite010
SQLite est extrêmement flexible car il permet également le SQLite spécifique dot commandes dans la syntaxe SQL, (bien qu'ils soient interprétés par CLI. Cela signifie que vous pouvez faire des choses comme ça.
créer une sms
table comme ceci:
# sqlite3 mycool.db '.schema sms'
CREATE TABLE sms (_id integer primary key autoincrement, Address VARCHAR, Display VARCHAR, Class VARCHAR, ServiceCtr VARCHAR, Message VARCHAR, Timestamp TIMESTAMP NOT NULL DEFAULT current_timestamp);
puis deux fichiers:
# echo "1,ADREZZ,DizzPlay,CLAZZ,SMSC,DaTestMessage,2015-01-24 21:00:00">test.csv
# cat test.sql
.mode csv
.header on
.import test.csv sms
pour tester l'importation du fichier CSV en utilisant le fichier SQL, Lancez:
# sqlite3 -csv -header mycool.db '.read test.sql'
In conclusion, cela signifie que vous pouvez utiliser la déclaration .import
dans SQLite SQL, tout comme vous pouvez le faire dans n'importe quel autre RDB, comme MySQL avec LOAD DATA INFILE
etc. Cependant, ce n'est pas recommandé.
découvrez termsql. https://gitorious.org/termsql https://gitorious.org/termsql/pages/Home
il convertit le texte en SQL sur la ligne de commande. (CSV est juste le texte)
exemple:
cat textfile | termsql -o sqlite.db
par défaut le délimiteur est whitespace, donc pour que ça marche avec CSV qui utilise commata, vous le feriez comme ceci:
cat textfile | termsql -d ',' -o sqlite.db
alternativement vous pouvez le faire:
termsql -i textfile -d ',' -o sqlite.db
par défaut, il générera les noms de colonnes "COL0", "COL1", si vous voulez qu'il utilise la première ligne pour les noms de colonnes vous faites ceci:
termsql -i textfile -d ',' -1 -o sqlite.db
si vous voulez définir des noms de colonne personnalisés vous faites ceci:
termsql -i textfile -d ',' -c 'id,name,age,color' -o sqlite.db
si vous l'utilisez dans windows, assurez-vous d'ajouter le chemin à la base de données dans "" et aussi d'utiliser double slash \ dans le chemin pour s'assurer que windows Le comprend.
voici comment vous pouvez insérer dans une colonne d'identité:
CREATE TABLE my_table (id INTEGER PRIMARY KEY AUTOINCREMENT, name COLLATE NOCASE);
CREATE TABLE temp_table (name COLLATE NOCASE);
.import predefined/myfile.txt temp_table
insert into my_table (name) select name from temp_table;
monfichier.txt est un fichier C:\code\db\predefined\
"151910920 des données".db est dans C:\code\db\monfichier.txt contient des chaînes séparées par un caractère newline.
si vous voulez ajouter plus de colonnes, il est plus facile de les séparer en utilisant le caractère pipe, qui est la valeur par défaut.
Importer un fichier csv ou sql, sqlite avec phpLiteAdmin , il est excellent.