SQLite: Wbudowany relacyjny DBMS
SQLite jest relacyjnym DBMS, który działa jako biblioteka w procesie aplikacji, bez osobnego serwera.
DBMS — system zarządzania bazą danych: oprogramowanie, który tworzy, przechowuje, przetwarza zapytania i zarządza bazami danych. SQLite to wbudowany relacyjny DBMS implementowany jako biblioteka programowa. W W przeciwieństwie do PostgreSQL czy MySQL, SQLite nie wymaga osobnego procesu serwera bazy danych dane: aplikacja uzyskuje dostęp do biblioteki SQLite bezpośrednio, w ramach własnej biblioteki Proces.
W normalnym użyciu plików zawartość bazy danych jest SQLite przechowywana w jednym głównym pliku
pliku. Podczas pracy SQLite może tworzyć dodatkowe pliki usługowe, takie jak
rollback journal lub WAL. SQLite również utrzymuje bazę danych w pamięci
(:memory:), która w ogóle nie zapisuje się na dysku — jest to wygodne,
na przykład do testów (rozdział 22.33).
Pracować z SQLite w Python, sqlite3,
który zapewnia interfejs DB-API wersji 2.0. W zwykłych wersjach CPython jest dostępny bez instalacji
osobny pakiet przez pip, ale technicznie rzecz biorąc sqlite3
odnosi się do opcjonalnych modułów konkretnego zestawu interpretera i wykorzystuje
SQLite instalowane w systemie lub składane z Python.
| Konwencjonalny DBMS klient-serwer | SQLite | |
|---|---|---|
| Oddzielny dodawca dokumentów | Tak, działa cały czas | None – Działa w procesie aplikacji |
| Główne przechowywanie | Zarządzane przez serwer bazy danych | Główny plik bazy danych (pliki serwisowe są możliwe journal/WAL) |
| Przygotowanie do rozpoczęcia | Zainstaluj i uruchom serwer, skonfiguruj dostęp | Nie wymaga osobnej konfiguracji serwera |
| Kilka serwerów aplikacji pisze jednocześnie | Standardowy scenariusz | Ograniczone wsparcie dla jednoczesnego nagrywania |
Połączenie i kursor
import sqlite3
baza = sqlite3.connect("zadachi.db")
baza.row_factory = sqlite3.Row # Dostęp do kolumn według nazwy
kursor = baza.execute("SELECT id, title FROM tasks")
for stroka in kursor:
print(stroka["id"], stroka["title"])
baza.close()
sqlite3.connect(...) otwiera się (lub tworzy, jeśli plik nadal jest
nie) pliku bazy danych. row_factory = sqlite3.Row pozwala
Określenie kolumn wyników po nazwie, a nie tylko przez indeks liczbowy, jest wygodniejsze i
jest bardziej niezawodny, zwłaszcza jeśli kolejność kolumn w zapytaniu zmienia się.
sqlite3.connect(...) nie może być używany z wielu wątków bez ostrożności. Praktycznym sposobem organizacji połączeń w aplikacji Flask- jest otwarcie połączenia dla każdego żądania i natychmiastowe jego zamknięcie, jak pokazano w Sekcji 22.29.Oficjalna dokumentacja: SQLite, Python — moduł sqlite3.