.mode și .headers în SQLite

Linia de comandă sqlite3 sqlite3 3.x (modurile box, table, markdown și json: 3.33.0)

Alege cum afișează sqlite3 rezultatele: tabel cu chenar, CSV, JSON, Markdown, câte o coloană pe rând; .headers pornește antetul.

Sintaxă
.mode
.mode MOD
.mode MOD --null TEXT
.headers on|off

Ce face .mode și .headers

.mode schimbă formatul în care utilitarul sqlite3 afișează rezultatul fiecărui SELECT. Datele din bază nu se schimbă, doar felul în care le vezi. Fără argument, .mode spune care este modul curent.

Moduri folosite des: box și table (tabel cu chenar, bune pentru citit), list (valori separate de |, modul implicit), csv și tabs (pentru export), json (o listă de obiecte), markdown (tabel de lipit în documentație), line (câte o coloană pe rând, util pentru rânduri lungi) și insert (instrucțiuni INSERT). Lista completă: .mode --list.

.headers on afișează numele coloanelor deasupra datelor. În versiunile recente, schimbarea modului poate reseta antetul, așa că scrie .headers on după .mode sau folosește opțiunea --title on. Exemplele de pe acest site au rulat cu -box -header, adică în modul box cu antet.

Parametri

Parametru Descriere
MOD box, table, list, csv, tabs, json, markdown, line, insert, html, quote și altele.
--null TEXT Textul afișat în locul valorilor NULL (implicit nimic).
--title on|off Afișează sau ascunde antetul, ca .headers.
--once Setările de după această opțiune se aplică doar următoarei comenzi.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE clienti (id INTEGER PRIMARY KEY, nume TEXT NOT NULL, oras TEXT);
INSERT INTO clienti (nume, oras) VALUES ('Ana', 'Iași'), ('Mihai', NULL);

Exemplul 1: list și csv, cu antet

În modul list, NULL apare ca nimic între separatori. În csv și tabs, unele texte (aici cel cu diacritice) sunt puse între ghilimele; programele care citesc CSV le înțeleg corect.

.mode list
.headers on
SELECT * FROM clienti;
.mode csv
.headers on
SELECT * FROM clienti;

Rezultat

id|nume|oras
1|Ana|Iași
2|Mihai|
id,nume,oras
1,Ana,"Iași"
2,Mihai,

Exemplul 2: JSON și Markdown

.mode json
SELECT * FROM clienti;
.mode markdown
SELECT * FROM clienti;

Rezultat

[{"id":1,"nume":"Ana","oras":"Iași"},
{"id":2,"nume":"Mihai","oras":null}]
| id | nume  | oras |
|----|-------|------|
|  1 | Ana   | Iași |
|  2 | Mihai |      |

Exemplul 3: NULL vizibil și un mod doar pentru o comandă

--null face vizibile valorile lipsă. .mode --once line afișează următorul rezultat câte o coloană pe rând, apoi revine singur la modul anterior (box).

.mode box --null NULL
SELECT * FROM clienti;
.mode --once line
SELECT * FROM clienti WHERE id = 1;
SELECT count(*) AS total FROM clienti;

Rezultat

╭────┬───────┬──────╮
│ id │ nume  │ oras │
╞════╪═══════╪══════╡
│  1 │ Ana   │ Iași │
│  2 │ Mihai │ NULL │
╰────┴───────┴──────╯
  id: 1
nume: Ana
oras: Iași
╭───────╮
│ total │
╞═══════╡
│     2 │
╰───────╯

Greșeli frecvente

  • Crezi că .mode schimbă datele. Este doar afișarea: un număr salvat ca text rămâne text, indiferent de mod.
  • Exporți cu .mode list și deschizi rezultatul în Excel. Separatorul | și lipsa ghilimelelor strică textele care conțin separatorul; pentru export folosește .mode csv împreună cu .once fisier.csv.
  • Pierzi antetul după ce schimbi modul. Pune .headers on după .mode.

Comenzi înrudite

  • .import: Încarcă un fișier CSV într-un tabel: îl creează din antetul fișierului sau adaugă rândurile într-un tabel existent.
  • .dump: Scrie toată baza de date (sau doar unele tabele) ca instrucțiuni SQL, bune pentru backup, transfer sau control al versiunilor.
  • .tables: Afișează numele tabelelor și vederilor din baza de date deschisă, eventual doar pe cele care se potrivesc cu un tipar LIKE.
  • json_group_array / json_group_object: Funcții de agregare care adună valorile dintr-un grup de rânduri într-un tablou sau obiect JSON, gata de trimis unui API.