SQLite: встраиваемая реляционная СУБД
SQLite — реляционная СУБД, работающая как библиотека внутри процесса приложения, без отдельного сервера.
СУБД — система управления базами данных: программное обеспечение, которое создаёт, хранит, обрабатывает запросы и управляет базами данных. SQLite — встраиваемая реляционная СУБД, реализованная в виде программной библиотеки. В отличие от PostgreSQL или MySQL, SQLite не требует отдельного процесса сервера базы данных: приложение обращается к библиотеке SQLite непосредственно, внутри собственного процесса.
При обычном файловом использовании содержимое базы SQLite хранится в одном основном
файле. Во время работы SQLite может создавать дополнительные служебные файлы, например
rollback journal или WAL. SQLite также поддерживает базу данных в оперативной памяти
(:memory:), которая не сохраняется на диск вовсе — это удобно,
например, для тестов (раздел 22.33).
Для работы с SQLite в Python используется модуль sqlite3,
предоставляющий интерфейс DB-API 2.0. В обычных сборках CPython он доступен без установки
отдельного пакета через pip, однако технически sqlite3
относится к опциональным модулям конкретной сборки интерпретатора и использует библиотеку
SQLite, установленную в системе или собранную вместе с Python.
| Обычная клиент-серверная СУБД | SQLite | |
|---|---|---|
| Отдельный процесс-сервер | Да, работает постоянно | Нет — работает внутри процесса приложения |
| Основное хранение | Управляется сервером базы данных | Основной файл базы данных (возможны служебные файлы journal/WAL) |
| Настройка для старта | Установить и запустить сервер, настроить доступ | Не требуется отдельная настройка сервера |
| Несколько серверов приложения пишут одновременно | Штатный сценарий | Ограниченная поддержка одновременной записи |
Подключение и курсор
import sqlite3
baza = sqlite3.connect("zadachi.db")
baza.row_factory = sqlite3.Row # доступ к столбцам по имени
kursor = baza.execute("SELECT id, title FROM tasks")
for stroka in kursor:
print(stroka["id"], stroka["title"])
baza.close()
sqlite3.connect(...) открывает (или создаёт, если файла ещё
нет) файл базы данных. row_factory = sqlite3.Row позволяет
обращаться к столбцам результата по имени, а не только по числовому индексу — удобнее и
надёжнее, особенно если порядок столбцов в запросе когда-нибудь изменится.
sqlite3.connect(...) нельзя без осторожности использовать сразу из нескольких потоков. Практичный способ организовать подключения во Flask-приложении — открывать соединение под каждый запрос и закрывать его сразу после — показывает раздел 22.29.Официальная документация: SQLite, Python — модуль sqlite3.