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.

111
demandé sur shA.t 2009-06-25 23:57:44

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>
154
répondu Jay Igor 2009-06-25 20:15:53

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.

24
répondu Kyle Cronin 2009-06-25 19:59:11

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>
21
répondu Jake Wyman 2015-08-29 08:50:35

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.

11
répondu blairxy 2010-02-22 23:10:36

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").

10
répondu Rufus Pollock 2014-03-10 13:01:22

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

6
répondu DnD 2015-08-29 08:49:04

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

1
répondu not2qubit 2015-01-24 19:40:30

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
1
répondu user3573558 2015-08-29 08:49:45

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.

1
répondu MahD 2016-08-18 14:09:31

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.

0
répondu live-love 2018-04-24 01:47:18

Importer un fichier csv ou sql, sqlite avec phpLiteAdmin , il est excellent.

-1
répondu Karra 2016-05-05 09:03:20