Rozdział 22 · Tworzenie stron internetowych z Python

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-serwerSQLite
Oddzielny dodawca dokumentówTak, działa cały czasNone – Działa w procesie aplikacji
Główne przechowywanieZarządzane przez serwer bazy danychGłówny plik bazy danych (pliki serwisowe są możliwe journal/WAL)
Przygotowanie do rozpoczęciaZainstaluj i uruchom serwer, skonfiguruj dostępNie wymaga osobnej konfiguracji serwera
Kilka serwerów aplikacji pisze jednocześnieStandardowy scenariuszOgraniczone wsparcie dla jednoczesnego nagrywania
Gdzie SQLite szczególnie dobrze pasuje
SQLite jest pełnoprawnym silnikiem SQL-, który jest również używany przez bardzo duże aplikacje, zarówno jako główne przechowywanie danych lokalnych, jak i jako część większego systemu. SQLite doskonale nadaje się do aplikacji lokalnych, szkoleń, prototypów, testów (Rozdział 22.33) oraz wielu małych i średnich wdrożeń, gdzie model współbieżnego dostępu jest SQLite wystarczający. Baza danych klient-serwer jest wybierana nie dlatego, że SQLite jest gorsza jako silnik, lecz wtedy, gdy kilka serwerów aplikacji musi niezawodnie zapisywać się równolegle do tej samej bazy, co jest szczegółowo omówione w Sekcji 22.24.

Połączenie i kursor

podklyuchenie.py
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ę.

Oddzielne połączenie dla każdego strumienia
Domyślnie jedno połączenie 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.

Praktyka: połączenie z SQLite przez sqlite3
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →