Menu

SQLite CLI : utiliser le shell sqlite3 en ligne de commande

Maîtrisez le shell sqlite3 depuis le terminal : ouvrir une base, lancer des requêtes, utiliser les dot commands et importer ou exporter des données en CSV.

Cette page contient des éditeurs exécutables — modifiez, exécutez et voyez la sortie instantanément.

Le CLI en deux mots

sqlite3 est le shell en ligne de commande officiel livré avec SQLite. Il ouvre un fichier de base de données, affiche une invite, et vous laisse exécuter du SQL dessus. Pas de serveur, pas d'authentification, pas de configuration — juste un binaire et un fichier.

C'est l'outil parfait pour jeter un œil rapide à une base, lancer une requête ponctuelle, dumper un schéma ou importer des données. La façon la plus directe de fouiller dans une base sans écrire la moindre ligne de code applicatif.

$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite>

Si mydata.db n'existe pas encore, SQLite le créera dès votre première modification. Lancer sqlite3 sans nom de fichier ouvre une base en mémoire, jetable après usage.

Exécuter du SQL dans le shell sqlite3

Une fois dans le shell, tapez votre SQL et terminez chaque instruction par un point-virgule. Le shell attend ce point-virgule : si vous appuyez sur Entrée sans en mettre, il affiche simplement une invite de continuation.

Le point-virgule, c'est le signal « j'ai fini, exécute ». Si vous l'oubliez, le shell reste planté avec une invite ...> à attendre. Tape ; sur une nouvelle ligne pour clore la commande.

Les dot commands ne sont pas du SQL

Tout ce qui commence par un . est une dot command — une instruction destinée au shell lui-même, pas au moteur SQL. Pas besoin de point-virgule, et ces commandes ne fonctionnent qu'à l'intérieur du shell sqlite3.

sqlite> .tables
books

sqlite> .schema books
CREATE TABLE books (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  year INTEGER
);

sqlite> .help

Voici la poignée de commandes que vous utiliserez en permanence :

  • .tables — liste toutes les tables de la base courante.
  • .schema [table] — affiche l'instruction CREATE TABLE d'une table en particulier, ou de toutes.
  • .databases — liste les fichiers de base attachés.
  • .mode <format> — change la façon dont les résultats de requête sont affichés.
  • .headers on — affiche les noms de colonnes au-dessus des résultats.
  • .read file.sql — exécute un fichier SQL.
  • .exit ou .quit — sort du shell.

.help affiche la liste complète. Il en existe des dizaines, mais en pratique vous n'en utiliserez qu'une dizaine au quotidien.

Rendre la sortie lisible

Par défaut, les résultats sont séparés par des barres verticales et sans en-têtes — pratique pour les scripts, pénible à lire. Deux dot commands règlent ça :

sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM books;
id  title        year
--  -----------  ----
1   Dune         1965
2   Neuromancer  1984

Autres modes bien pratiques :

  • .mode box — affiche un tableau avec des bordures Unicode. Parfait pour les captures d'écran.
  • .mode csv — valeurs séparées par des virgules, idéal pour rediriger vers d'autres outils.
  • .mode json — sortie en JSON, un objet par ligne.
  • .mode line — une colonne par ligne, très utile quand les lignes sont longues.

Ces réglages sont réinitialisés à chaque lancement du shell. Pour les rendre permanents, placez-les dans un fichier ~/.sqliterc : sqlite3 le chargera automatiquement au démarrage.

Importer et exporter du CSV avec SQLite

Le CLI gère le CSV nativement. Passez en mode CSV, puis utilisez .import pour charger un fichier dans une table :

sqlite> .mode csv
sqlite> .import authors.csv authors
sqlite> SELECT * FROM authors LIMIT 3;

Si la table n'existe pas, .import la crée en prenant la première ligne comme noms de colonnes. Si elle existe déjà, la première ligne est considérée comme une donnée, sauf si vous ajoutez --skip 1.

Dans l'autre sens, pour exporter, il suffit de rediriger la sortie vers un fichier :

sqlite> .headers on
sqlite> .mode csv
sqlite> .output books.csv
sqlite> SELECT * FROM books;
sqlite> .output stdout

.output filename redirige tous les résultats des requêtes suivantes vers ce fichier, jusqu'à ce que vous repassiez en .output stdout. Le mécanisme reste le même, que vous exportiez en CSV, en JSON ou que vous fassiez un dump brut du schéma.

Exécuter un fichier SQL avec sqlite3

Dès que vous avez plus de quelques instructions à passer, le mieux est de les regrouper dans un fichier .sql et de l'exécuter. Depuis le shell sqlite3 :

sqlite> .read setup.sql

Ou alors directement depuis votre terminal habituel, sans même ouvrir le shell :

Human Preview (English896 / 896 chars eval

$ sqlite3 mydata.db < setup.sql
$ sqlite3 mydata.db "SELECT count(*) FROM books;"

La seconde forme exécute une requête unique puis rend la main — parfait pour les scripts shell ou une vérification rapide. Vous pouvez la combiner avec les réglages .mode via l'option -cmd si vous voulez formater la sortie :

$ sqlite3 -header -column mydata.db "SELECT * FROM books;"

Inspecter une base de données inconnue

Quand on vous file un fichier .db sans la moindre indication sur son contenu, voici la marche à suivre :

$ sqlite3 mystery.db
sqlite> .tables
sqlite> .schema
sqlite> .indexes
sqlite> SELECT count(*) FROM some_table;

.schema sans argument affiche tous les CREATE TABLE, CREATE INDEX et CREATE TRIGGER du fichier. .indexes liste les index par table. Cinq minutes passées dans le shell vous en apprendront plus sur une base de données que n'importe quel README.

Pour obtenir un instantané textuel complet que vous pourrez rejouer ailleurs, utilisez .dump :

sqlite> .output backup.sql
sqlite> .dump
sqlite> .output stdout

Cela génère un script SQL capable de reconstruire entièrement la base de données — schéma et données compris — lorsqu'on le réinjecte dans sqlite3.

Quitter sqlite3

Trois façons de sortir du shell, toutes équivalentes :

sqlite> .exit
sqlite> .quit

Ou bien Ctrl+D sur macOS et Linux (Ctrl+Z puis Entrée sous Windows). Vos modifications sont déjà sauvegardées : SQLite valide chaque instruction au fur et à mesure de son exécution, sauf si vous avez ouvert une transaction explicitement.

La suite : les outils graphiques pour SQLite

Le CLI est rapide et scriptable, mais on a parfois envie de naviguer dans les tables à la souris, de trier les colonnes et d'éditer les lignes visuellement. Il existe plusieurs bons outils graphiques pour SQLite — c'est ce qu'on voit dans la page suivante.

Questions fréquentes

Comment ouvrir une base de données avec le SQLite CLI ?

Tapez sqlite3 mydata.db dans votre terminal. Si le fichier n'existe pas encore, SQLite le crée automatiquement dès que vous écrivez votre première table. Lancer sqlite3 sans nom de fichier ouvre une base temporaire en mémoire, qui disparaît dès que vous quittez le shell.

Comment quitter le shell sqlite3 ?

Tapez .exit ou .quit puis Entrée — les deux font exactement la même chose. Sur la plupart des systèmes, Ctrl+D (ou Ctrl+Z suivi d'Entrée sous Windows) ferme aussi le shell.

Qu'est-ce que les dot commands dans SQLite ?

Les dot commands sont les commandes intégrées au shell qui commencent par . — par exemple .tables, .schema, .mode ou encore .import. Ce ne sont pas des instructions SQL mais des directives destinées au CLI lui-même : pas besoin de point-virgule à la fin, et elles ne fonctionnent que dans le shell sqlite3.

Comment exécuter un fichier SQL depuis le SQLite CLI ?

Deux options : depuis le shell, utilisez .read fichier.sql ; ou depuis l'extérieur, redirigez le fichier avec sqlite3 mydata.db < fichier.sql. Dans les deux cas, les instructions s'exécutent dans l'ordre sur la base ouverte.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER