.open în SQLite

Închide baza curentă și deschide (sau creează) alt fișier de bază de date, fără să ieși din sqlite3.

Sintaxă
.open FISIER
.open --readonly FISIER
.open --new FISIER

Ce face .open

Pornit fără argumente, sqlite3 lucrează pe o bază temporară, în memorie, care dispare la ieșire. .open magazin.db deschide fișierul magazin.db; dacă nu există, este creat. De acum, tot ce scrii se salvează pe disc.

Același efect îl are pornirea cu numele fișierului: sqlite3 magazin.db. Cu .open schimbi baza fără să închizi utilitarul. .open :memory: revine la o bază goală în memorie.

Opțiuni utile: --readonly deschide fișierul doar pentru citire (orice scriere dă eroare), --new golește fișierul și pornește cu o bază nouă, iar --ifexists refuză să creeze un fișier care nu există.

Parametri

Parametru Descriere
FISIER Calea fișierului; :memory: pentru o bază în memorie.
--readonly Deschide doar pentru citire.
--new Șterge conținutul fișierului și începe cu o bază goală.
--ifexists Deschide doar dacă fișierul există deja.

Exemple

Exemplul 1: Datele rămân în fișier

Datele scrise în magazin.db sunt încă acolo după ce trecem pe o bază în memorie (goală, deci .tables nu afișează nimic) și redeschidem fișierul.

.open magazin.db
CREATE TABLE produse (id INTEGER PRIMARY KEY, nume TEXT, pret INTEGER);
INSERT INTO produse (nume, pret) VALUES ('Caiet', 12), ('Pix', 4);

.open :memory:
.tables

.open magazin.db
SELECT * FROM produse;

Rezultat

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

Exemplul 2: Doar pentru citire

Cu --readonly, citirea merge, dar INSERT este refuzat. Mesajul de mai jos este cel afișat de sqlite3 când rulează scriptul dintr-un fișier.

.open magazin.db
CREATE TABLE produse (id INTEGER PRIMARY KEY, nume TEXT, pret INTEGER);
INSERT INTO produse (nume, pret) VALUES ('Caiet', 12);

.open --readonly magazin.db
SELECT count(*) AS produse FROM produse;
INSERT INTO produse (nume, pret) VALUES ('Rigla', 5);

Rezultat (eroare)

╭─────────╮
│ produse │
╞═════════╡
│       1 │
╰─────────╯
Error near line 7: attempt to write a readonly database

Greșeli frecvente

  • Lucrezi zeci de minute în sqlite3 pornit fără fișier și pierzi totul la ieșire. Verifică cu .databases ce fișier este deschis; dacă e gol, ești în memorie. Poți salva baza cu .save fisier.db.
  • Greșești o literă în numele fișierului. .open creează fără întrebări un fișier nou, gol; folosește --ifexists când vrei doar să deschizi.
  • Folosești .open --new pe o bază bună. Opțiunea șterge conținutul existent.

Comenzi înrudite

  • .tables: Afișează numele tabelelor și vederilor din baza de date deschisă, eventual doar pe cele care se potrivesc cu un tipar LIKE.
  • .dump: Scrie toată baza de date (sau doar unele tabele) ca instrucțiuni SQL, bune pentru backup, transfer sau control al versiunilor.
  • .read: Rulează instrucțiunile SQL (și comenzile cu punct) dintr-un fișier, ca și cum le-ai fi scris de la tastatură.
  • ATTACH DATABASE: Deschide încă o bază de date în aceeași conexiune, ca să interoghezi sau să copiezi date între fișiere cu SQL obișnuit.
  • PRAGMA journal_mode (WAL): Alege cum protejează SQLite datele la scriere. Modul WAL permite citiri în timp ce altcineva scrie și este alegerea uzuală pentru aplicații.