Aller au contenu

SQLite : import et export

Échanger des données avec des fichiers CSV, JSON ou SQL. Les exemples utilisent les tables clients et commandes.

Fichier clients.csv (première ligne = noms de colonnes) :

nom,email,ville
Zoé Blanc,zoe@exemple.com,Lille
Hugo Noir,hugo@exemple.com,Nantes
.mode csv
.import clients.csv clients_import
.mode table
SELECT * FROM clients_import;
INSERT INTO clients (nom, email, ville) SELECT nom, email, ville FROM clients_import;
DROP TABLE clients_import;
  • Quand la table de destination n’existe pas, .import la crée à partir de la ligne d’en-tête (toutes les colonnes en TEXT). Ici, passer par une table temporaire (clients_import) permet de compléter ensuite les colonnes automatiques de clients (id, cree_le).
  • Quand la table existe déjà, ajouter --skip 1 pour ignorer la ligne d’en-tête : .import --skip 1 donnees.csv ma_table. Les colonnes du fichier doivent alors correspondre à celles de la table (même nombre, même ordre).

Depuis la ligne de commande :

Fenêtre de terminal
sqlite3 boutique.db -cmd ".mode csv" ".import clients.csv clients_import"
.headers on
.mode csv
.output commandes.csv
SELECT * FROM commandes;
.output stdout

En une ligne :

Fenêtre de terminal
sqlite3 -header -csv boutique.db "SELECT * FROM commandes;" > commandes.csv

Pour un séparateur différent : -separator ';'. Pour un tableur français, préférer le point-virgule.

Fenêtre de terminal
sqlite3 -json boutique.db "SELECT * FROM clients;" > clients.json # JSON
sqlite3 -markdown -header boutique.db "SELECT * FROM clients;" # tableau Markdown
sqlite3 -html -header boutique.db "SELECT * FROM clients;" # lignes HTML
Fenêtre de terminal
sqlite3 boutique.db .dump > boutique.sql # structure et données
sqlite3 boutique.db ".dump clients" > clients.sql # une table
sqlite3 boutique.db ".schema" > schema.sql # structure seule
sqlite3 boutique.db .dump | gzip > boutique.sql.gz
Fenêtre de terminal
sqlite3 nouvelle.db < boutique.sql
gunzip -c boutique.sql.gz | sqlite3 nouvelle.db

Ou dans la console : .read boutique.sql.

ATTACH DATABASE 'archive.db' AS archive;
CREATE TABLE archive.commandes_2025 AS SELECT * FROM commandes WHERE passee_le < '2026-01-01';
DELETE FROM commandes WHERE passee_le < '2026-01-01'; -- après vérification de la copie
DETACH DATABASE archive;
Fenêtre de terminal
# PostgreSQL ou MySQL vers CSV, puis vers SQLite
psql -d boutique -c "\copy clients TO 'clients.csv' WITH (FORMAT csv, HEADER true)"
sqlite3 boutique.db -cmd ".mode csv" ".import clients.csv clients_import"
Symptôme Piste
expected 3 columns but found 4 Le CSV ne correspond pas à la table : vérifier le séparateur et les colonnes
La première ligne est importée comme une donnée Ajouter --skip 1
Les accents sont abîmés Fichier à convertir en UTF-8 (iconv -f ISO-8859-1 -t UTF-8)
Un champ avec une virgule est coupé Entourer le champ de guillemets doubles dans le CSV
UNIQUE constraint failed Doublon sur une colonne unique : nettoyer le fichier ou utiliser INSERT OR IGNORE