web-dev-qa-db-fra.com

Comment importer un fichier .sql ou .csv dans SQLite?

Je dois vider un fichier . Sql ou . Csv 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. En ce moment, quand je tape:

sqlite3Prompt> .import FILENAME TABLE 

Je reçois une erreur de syntaxe, car elle attend une table et non une base de données complète.

115
happythenewsad

Pour importer à partir d'un fichier SQL, utilisez les éléments suivants:

sqlite> .read <filename>

Pour importer à partir d'un fichier CSV, vous devez spécifier le type de fichier et la table de destination:

sqlite> .mode csv <table>
sqlite> .import <filename> <table>
161
Jay Igor

Essayez de le faire à partir de la commande comme ceci:

cat dump.sql | sqlite3 database.db

Cela ne fonctionnera évidemment qu'avec les instructions SQL dans dump.sql. Je ne sais pas comment importer un fichier CSV.

26
Kyle Cronin

Pour passer de SCRATCH avec SQLite DB à l’importation du fichier CSV dans une table:

  • Obtenez SQLite sur le site.
  • À l'invite de commande, exécutez sqlite3 <your_db_file_name> * Il sera créé sous la forme d'un fichier vide.
  • Créez une nouvelle table dans votre nouvelle base de données. La table doit correspondre à vos champs CSV pour l'importation.
  • Vous faites cela par la commande SQL: CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);

Une fois que vous avez créé la table et que les colonnes correspondent aux données du fichier, vous pouvez procéder comme indiqué ci-dessus ...

.mode csv <table_name>
.import <filename> <table_name>
22
Jake Wyman

La commande sqlite3 .import ne fonctionnera pas pour les données csv ordinaires, car elle considère toute virgule comme un séparateur, même dans une chaîne entre guillemets.

Cela inclut l’essai de réimporter un fichier csv 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 devions transformer le fichier csv en une liste d'instructions Insert ou un autre délimiteur fonctionnera peut-être.

Sur SuperUser, j’ai suggéré de faire appel à LogParser pour traiter les fichiers csv, je vais examiner cela.

11
blairxy

Si vous préférez utiliser un script (python), il existe un script python) qui automatise ce processus à: https://github.com/rgrp/csv2sqlite

Ceci créera automatiquement la table pour vous et vous permettra de deviner des types et de transtyper des données (pour que, par exemple, quelque chose soit un nombre et que le type de colonne soit défini sur "réel").

10
Rufus Pollock

Rappelez-vous que le délimiteur par défaut pour SQLite est le tuyau "|"

sqlite> .separator ";"

sqlite> .import path/filename.txt tablename 

http://sqlite.awardspace.info/syntax/sqlitepg01.htm#sqlite01

7
DnD

si vous l’utilisez dans des fenêtres, assurez-vous d’ajouter le chemin de la base de données dans "" et utilisez également une double barre oblique\dans le chemin pour vous assurer que Windows l’a bien compris.

1
MahD

Découvrez les termesql. https://gitorious.org/termsqlhttps://gitorious.org/termsql/pages/Home

Il convertit le texte en SQL sur la ligne de commande. (CSV est juste du texte)

Exemple:

cat textfile | termsql -o sqlite.db

Par défaut, le délimiteur est un espace. Pour le faire fonctionner avec un fichier CSV utilisant des virgules, procédez comme suit:

cat textfile | termsql -d ',' -o sqlite.db

sinon, vous pouvez le faire:

termsql -i textfile -d ',' -o sqlite.db

Par défaut, les noms de colonne "COL0", "COL1" sont générés. Si vous souhaitez utiliser la première ligne pour les noms de colonnes, procédez comme suit:

termsql -i textfile -d ',' -1 -o sqlite.db

Si vous souhaitez définir des noms de colonne personnalisés, procédez comme suit:

termsql -i textfile -d ',' -c 'id,name,age,color' -o sqlite.db
1
user3573558

SQLite est extrêmement flexible car il autorise également le spécifique commandes à points de SQLite dans la syntaxe SQL (bien qu'ils soient interprétés par CLI). Cela signifie que vous pouvez faire des choses comme celle-ci.

Créez une table sms 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 à l'aide du fichier SQL, exécutez:

# sqlite3 -csv -header mycool.db '.read test.sql'

En conclusion, cela signifie que vous pouvez utiliser l'instruction .import Dans SQLite SQL, comme dans n'importe quel autre RDB, comme MySQL avec LOAD DATA INFILE, Etc. Cependant, cela n'est pas recommandé.

1
not2qubit

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;

myfile.txt est un fichier dans C:\code\db\predefined \

data.db est dans C:\code\db \

myfile.txt contient des chaînes séparées par un caractère de nouvelle ligne.

Si vous souhaitez ajouter plus de colonnes, il est plus facile de les séparer à l'aide du caractère de canal, qui est le caractère par défaut.

0
live-love