.read în SQLite

Linia de comandă sqlite3 sqlite3 (toate versiunile 3.x)

Rulează instrucțiunile SQL (și comenzile cu punct) dintr-un fișier, ca și cum le-ai fi scris de la tastatură.

Sintaxă
.read FISIER
.read '|COMANDA'

Ce face .read

.read deschide un fișier text și execută tot ce găsește în el, rând cu rând: SQL obișnuit și comenzi cu punct. Este felul obișnuit de a aplica o schemă, o migrare sau un fișier de date de test fără să le copiezi în terminal.

Dacă argumentul începe cu |, sqlite3 rulează restul ca o comandă de sistem și execută ce scrie aceasta. Așa poți genera SQL cu un script.

Calea fișierului este relativă la directorul din care ai pornit sqlite3. Un fișier citit cu .read poate conține la rândul lui alte .read.

Parametri

Parametru Descriere
FISIER Fișierul cu instrucțiuni. Dacă începe cu |, este o comandă a cărei ieșire se rulează.

Exemple

Exemplul 1: Schema și datele dintr-un fișier

Fișierul produse.sql este scris în exemplu cu .output și .print. Textul de după .print e pus între ghilimele, ca punctul și virgulă de la final să rămână în fișier.

.output produse.sql
.print "CREATE TABLE produse (id INTEGER PRIMARY KEY, nume TEXT, pret INTEGER);"
.print "INSERT INTO produse (nume, pret) VALUES ('Caiet', 12), ('Pix', 4);"
.output stdout

.read produse.sql
SELECT nume, pret FROM produse ORDER BY pret;

Rezultat

╭───────┬──────╮
│ nume  │ pret │
╞═══════╪══════╡
│ Pix   │    4 │
│ Caiet │   12 │
╰───────┴──────╯

Exemplul 2: SQL generat de o comandă

Comanda echo scrie un SELECT, iar .read îl execută.

.read '|echo "SELECT 2 + 2 AS rezultat;"'

Rezultat

╭──────────╮
│ rezultat │
╞══════════╡
│        4 │
╰──────────╯

Greșeli frecvente

  • Te aștepți ca .read să se oprească la prima eroare. În modul interactiv, sqlite3 afișează eroarea și continuă; pornește-l cu -bail sau scrie .bail on ca să se oprească.
  • Rulezi același fișier de schemă de două ori. A doua oară CREATE TABLE dă eroare; scrie CREATE TABLE IF NOT EXISTS în scripturile care pot rula de mai multe ori.
  • Folosești .read dintr-un program. Este o comandă a utilitarului; în Python rulezi un fișier cu conexiune.executescript(text).

Comenzi înrudite

  • .dump: Scrie toată baza de date (sau doar unele tabele) ca instrucțiuni SQL, bune pentru backup, transfer sau control al versiunilor.
  • .import: Încarcă un fișier CSV într-un tabel: îl creează din antetul fișierului sau adaugă rândurile într-un tabel existent.
  • .open: Închide baza curentă și deschide (sau creează) alt fișier de bază de date, fără să ieși din sqlite3.
  • SQLite din Python (sqlite3): Modulul sqlite3 din biblioteca standard Python: conectare, interogări cu parametri, tranzacții și rânduri ca dicționare.