EMZETT.
Войти

SQLite: база данных в одном файле

Коротко: SQLite — небольшая встраиваемая база данных SQL, которой совсем не нужен сервер и которая хранит все данные в одном файле.

Подробнее: Большинство баз данных (PostgreSQL, MySQL) работают как отдельный сервер, к которому подключаются программы. SQLite же — библиотека, находящаяся прямо внутри программы и читающая и пишущая файл. Это самая распространённая в мире база данных: в каждом смартфоне, браузере и во многих приложениях.

Подробности

Свойства

  • Без установки, без настройки, без сервера.
  • Один файл базы данных (.db, .sqlite), легко копировать и резервировать.
  • Поддерживает в основном обычный SQL, транзакции (ACID), индексы, триггеры, представления, функции JSON.
  • Очень быстро для чтения и малых и средних объёмов данных (до многих гигабайт).
  • Общественное достояние, очень хорошо протестирована.

Пример

sqlite3 test.db
sqlite> CREATE TABLE animal (id INTEGER PRIMARY KEY, name TEXT, age INT);
sqlite> INSERT INTO animal (name, age) VALUES ('Mia', 4);
sqlite> SELECT * FROM animal;

В Python sqlite3 входит в стандартную библиотеку:

import sqlite3
con = sqlite3.connect('test.db')
print(con.execute('SELECT name FROM animal').fetchall())

Пределы

SQLite допускает много читателей, но только одного писателя одновременно (в режиме WAL читатели тем временем продолжают). Для множества одновременных записей с нескольких серверов лучше настоящий сервер баз данных. Собственного управления пользователями нет; защита — в файловой системе. Типы гибкие («type affinity»), не строгие, кроме таблиц STRICT. Сетевые файловые системы рискованны для файла.

Применение

Мобильные приложения, настольные программы, браузеры (закладки, история), хранилище конфигурации и кэша, небольшие и средние сайты, тесты, анализ данных с файлами и прототипы. Современные варианты и расширения, такие как libSQL/Turso и Litestream (репликация), приносят SQLite и в серверные среды. Когда приложение растёт, SQL часто можно перенести на PostgreSQL.

См. также: SQL, PostgreSQL, Транзакции и ACID, MySQL