SQLite — встраиваемая реляционная система управления базами данных без отдельного серверного процесса: все данные хранятся в одном файле с расширением .db или .sqlite. Движок работает внутри вашего приложения, поставляется под лицензией Public Domain и входит в стандартные библиотеки Python и PHP. Полностью поддерживает ACID-транзакции (атомарность, согласованность, изолированность, долговечность) и работает на Windows, macOS, Linux, iOS, Android и встраиваемых устройствах. Термин «serverless» (бессерверный) разработчики SQLite ввели в 2007 году — за семь лет до AWS Lambda.
SQLite — встраиваемая реляционная СУБД, в которой вся база данных хранится в одном обычном файле на диске. Никакого отдельного процесса, никакой настройки сетевых портов — приложение открывает файл и сразу работает через стандартный SQL.
Не знаете, с чего ребёнку начать в IT?
Дайте попробовать разные направления: Python, веб-разработку и робототехнику
Надёжность проекта подтверждена цифрами: около 2 млн автоматических тестов, покрытие кода на уровне 100% MC/DC (Modified Condition/Decision Coverage — критерий полного покрытия ветвей и условий) начиная с 2009 года, соотношение объёма тестов к объёму кода — 590:1. Технический лимит размера базы — 281 ТБ, что опровергает расхожий миф об SQLite как об «игрушечной» системе.
Пять атрибутов, отличающих SQLite от клиент-серверных баз данных:
Каждая строка в SQLite имеет виртуальный 64-битный столбец rowid; INTEGER PRIMARY KEY — его псевдоним. Внешние ключи (foreign keys) поддерживаются, но отключены по умолчанию из соображений обратной совместимости — включать через PRAGMA foreign_keys = ON; при каждом новом подключении.
Хотите освоить программирование и работу с базами данных с нуля? На курсе «Программирование: Уверенный старт» школьники создают реальные проекты — от Telegram-бота на Python до полноценного веб-приложения — и формируют портфолио. Узнайте подробнее на странице курса.
Четыре категории задач, где SQLite — первый выбор:
В production-окружениях SQLite несёт реальную нагрузку: Nomadlist и RemoteOK обрабатывают свыше 50 млн запросов в месяц на VPS за $40, Expensify и Tailscale применяют SQLite в корпоративных системах.
Три СУБД решают разные задачи, и выбор зависит от архитектуры проекта, а не от популярности технологии. SQLite встраивается без DevOps-нагрузки. MySQL и PostgreSQL работают по клиент-серверной модели: отдельный процесс, настройка, администрирование. По мере того как разработчики возвращаются к монолитам и простым стекам, SQLite всё чаще появляется там, где раньше автоматически ставили MySQL.
| Параметр |
SQLite |
MySQL |
PostgreSQL |
|---|---|---|---|
| Требует отдельного сервера | Нет | Да | Да |
| Горизонтальное масштабирование | Нет (LiteFS: ~100 tx/сек) | Да | Да |
| Скорость одиночных операций | Выше | Ниже | Ниже |
| Типов данных | 5 классов | 20+ | 40+ (JSON-native, векторы) |
| DevOps-нагрузка | Минимальная | Средняя | Высокая |
| Лицензия | Public Domain | GPL / коммерческая | PostgreSQL (свободная) |
| Встроен в Python/PHP | Да | Нет | Нет |
SQLite быстрее в одиночных операциях за счёт отсутствия сетевого стека. При высоких параллельных записях MySQL и PostgreSQL выигрывают. Файловая система с репликацией SQLite (LiteFS) от Fly.io позволяет получить распределённую архитектуру, но ограничена примерно 100 транзакциями в секунду на запись. PostgreSQL поддерживает 40+ типов данных, включая нативный JSON, геоданные и векторы — в SQLite их нет.
SQLite подходит для малых и средних проектов, прототипов, мобильных и IoT-приложений, десктопного программного обеспечения, тестовых окружений, а также для систем объёмом до 1 ТБ с одним пишущим процессом.
Переходите на MySQL или PostgreSQL, когда нужно:

Официальный источник — страница загрузок SQLite: готовые бинарники для всех операционных систем. Основной инструмент разработчика — интерфейс командной строки (CLI) sqlite3, который позволяет создавать базы, выполнять SQL-запросы и управлять схемой без дополнительного программного обеспечения.
Создание новой базы данных: sqlite3 mydb.db — если файл не существует, SQLite создаёт его автоматически. Основные команды для навигации в CLI:
На macOS удобнее всего через Homebrew: brew install sqlite. На Debian/Ubuntu: sudo apt-get install sqlite3. Проверить версию после установки: sqlite3 —version.
Для тестов и экспериментов удобна база в оперативной памяти без файла на диске: sqlite3 :memory: — данные исчезнут при завершении сессии.
Модуль sqlite3 входит в стандартную библиотеку Python начиная с версии 2.5 — устанавливать ничего дополнительно не нужно. Общий порядок работы с базой данных: connect → cursor → execute → fetchall → commit.
sqlite3.connect(‘mydb.db’) создаёт файл автоматически, если его нет. Для работы с базой в оперативной памяти без файла: sqlite3.connect(‘:memory:’).
Полезная настройка: conn.row_factory = sqlite3.Row возвращает строки как объекты с доступом по имени столбца — по аналогии со словарём (dict). Рекомендуемый паттерн — контекстный менеджер:
with sqlite3.connect(‘mydb.db’) as conn:
# автоматический коммит или откат при ошибке
Подробнее — в официальной документации модуля sqlite3.

Базовые операции с данными — CRUD (создание, чтение, обновление, удаление) — через модуль sqlite3:
import sqlite3
conn = sqlite3.connect(‘mydb.db’)
cursor = conn.cursor()
# Создание таблицы
cursor.execute(»’
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)
»’)
# Вставка — параметризованный запрос
cursor.execute(
«INSERT INTO users (name, email) VALUES (?, ?)»,
(«Алексей», «alex@mail.ru»)
)
rows = cursor.fetchall()
conn.commit()
conn.close()
Знак ? — параметризованный запрос: SQLite подставляет значения без интерпретации как SQL-код. Это основная защита от SQL-инъекций. fetchall() возвращает все строки результата, fetchone() — только первую.
SQLite поддерживает два варианта операции «вставить или обновить» (UPSERT):
Ребенок хочет изучать программирование? Пусть начнёт с реальных проектов
На курсе школьники создают Telegram-бота, сайт и веб-приложение
INSERT OR REPLACE — удаляет старую строку полностью и вставляет новую. Побочный эффект: rowid меняется, каскадные внешние ключи срабатывают как при удалении.
ON CONFLICT DO UPDATE — обновляет запись на месте, rowid сохраняется. Доступен начиная с SQLite 3.24.0 (июнь 2018):
INSERT INTO users (id, name, email)
VALUES (1, ‘Иван’, ‘ivan@mail.ru’)
ON CONFLICT(id) DO UPDATE SET email = excluded.email;
Когда что выбрать: ON CONFLICT DO UPDATE — когда важно сохранить rowid и не запускать каскадные удаления; INSERT OR REPLACE — когда нужна полная замена строки.
По умолчанию SQLite работает в режиме автофиксации: каждая INSERT — отдельная транзакция со сбросом на диск, 50–300 мс. При вставке тысяч строк это становится узким местом.
Решение — явная транзакция:
BEGIN TRANSACTION;
— ~5000 INSERT-запросов
COMMIT;
Дополнительные оптимизации: удалить индексы перед массовой вставкой и восстановить после; PRAGMA synchronous = NORMAL снижает число обращений к диску. В сумме ускорение пакетной вставки составляет от 10 до 100 раз.
SQLite оперирует пятью хранимыми классами данных против 20+ у MySQL и 40+ у PostgreSQL. Ключевое отличие — механизм Type Affinity (сродство типов): динамическая типизация, которой нет у большинства других реляционных СУБД.
| Класс |
Описание |
Примеры значений |
|---|---|---|
| NULL | Отсутствующее значение | NULL |
| INTEGER | Целые числа (1–8 байт) | 1, 42, −100 |
| REAL | Числа с плавающей точкой | 3.14, −0.5 |
| TEXT | Строки в кодировке UTF-8/UTF-16 | ‘hello’, ‘Привет’ |
| BLOB | Бинарные данные «как есть» | изображения, файлы |
Источник: документация SQLite, 2025.
Даты хранятся как TEXT в формате ISO 8601 (‘2025-07-21’) или как INTEGER (Unix timestamp). JSON хранится как TEXT, при этом SQLite 3.38.0+ содержит встроенные JSON-функции — json_extract, json_object. Объявлять тип столбца необязательно — SQLite корректно работает и без него.
В MySQL и PostgreSQL тип столбца жёстко ограничивает, что можно в нём хранить. В SQLite тип столбца задаёт аффинность — правило сравнения и преобразования данных, а не запрет на хранение.
Пример: в столбец с аффинностью INTEGER можно записать строку «123» — SQLite преобразует её в число 123. Строку «abc» в тот же столбец — сохранит как TEXT без ошибки. Пять аффинностей: INTEGER, REAL, TEXT, BLOB, NUMERIC. SQLite анализирует объявленный тип столбца (например VARCHAR(255)) и сопоставляет с ближайшей аффинностью — это обеспечивает совместимость с SQL-кодом, написанным для MySQL или PostgreSQL. Библиотеки объектно-реляционного отображения (ORM), например SQLAlchemy, автоматически абстрагируют эти различия.
Файл .db — бинарный, в обычном текстовом редакторе нечитаем. Для работы с ним существуют три категории: инструменты с графическим интерфейсом (GUI), онлайн-просмотрщики и ODBC-драйвер для интеграции с Excel и Power BI.
| Инструмент |
ОС |
Лицензия |
Portable |
SQL-консоль |
|---|---|---|---|---|
| SQLiteStudio | Win / Mac / Linux | GPL, бесплатно | Да | Да |
| DB Browser for SQLite | Win / Mac / Linux | MPL2 + GPL3 | Нет | Да |
| SQLite Online | Браузер | Бесплатно | — | Да |

SQLiteStudio — самый популярный GUI-менеджер для SQLite. Распространяется бесплатно под лицензией GPL, работает на Windows, macOS и Linux. Отличительная черта — portable-версия: скачали архив, распаковали, запустили без каких-либо шагов установки.
Основные функции: визуальный редактор схем без написания SQL, консоль с автодополнением запросов, импорт и экспорт в форматах CSV, JSON, XML. Скачать: sqlitestudio.pl.
DB Browser for SQLite (лицензия MPL2 + GPL3) ориентирован на пользователей без опыта работы с SQL: данные редактируются прямо в таблице как в Excel, структура создаётся через визуальный интерфейс. Portable-версии нет. Поддерживаемые платформы: Windows, macOS, Linux. Скачать: sqlitebrowser.org.
Открыть файл .db без установки программ: sqliteonline.com и SQLiteViewer.app — загружаете файл в браузере и выполняете базовые SQL-запросы прямо там.
Стандартный интерфейс подключения к базам данных (ODBC, Open Database Connectivity) позволяет подключить SQLite к Excel, Power BI и другим BI-инструментам как обычный источник данных. Скачать со страницы загрузок SQLite.
Главное ограничение SQLite в многопользовательских сценариях — параллельная запись. По умолчанию запись блокирует весь файл базы. Журнализация с упреждающей записью (WAL, Write-Ahead Logging) решает эту проблему и открывает SQLite дорогу в настоящие production-окружения.

В стандартном режиме DELETE (по умолчанию) запись устанавливает эксклюзивную блокировку всего файла — параллельное чтение в этот момент невозможно, приложение получает ошибку SQLITE_BUSY.
WAL меняет механизм: изменения записываются в отдельный журнальный файл (.db-wal), основной файл базы остаётся доступным для чтения одновременно. Периодически происходит checkpoint — перенос накопленных изменений из журнала в основной файл. Дополнительно создаётся файл .db-shm (разделяемая память для координации читателей и писателей).
Активация: PRAGMA journal_mode = wal; — выполнить один раз. Настройка сохраняется в файле базы навсегда, повторять при каждом подключении не нужно.

SQLite справляется с нагрузками, которые принято считать уделом клиент-серверных СУБД:
Надёжность подтверждена тестированием: около 2 млн тестов, соотношение тест-код 590:1, 100% покрытие MC/DC с 2009 года. Разработчики SQLite управляют исходным кодом через Fossil VCS — собственную систему контроля версий, построенную на SQLite.
SQLite работает без отдельного серверного процесса — вся база в одном файле. MySQL и PostgreSQL требуют установки и настройки сервера. SQLite встроена в Python и PHP, быстрее в одиночных операциях, но уступает при высоких параллельных записях и не поддерживает горизонтальное масштабирование без дополнительных инструментов.
Файл SQLite бинарный — в текстовом редакторе нечитаем. Варианты: SQLiteStudio (sqlitestudio.pl), DB Browser for SQLite (sqlitebrowser.org), онлайн-сервис sqliteonline.com или командная строка sqlite3 mydb.db.
Используйте: UPDATE users SET email = ‘new@email.com’ WHERE id = 1;. Без условия WHERE обновятся все строки таблицы. Для вставки или обновления одной командой: INSERT OR REPLACE INTO … или INSERT INTO … ON CONFLICT DO UPDATE SET ….
Нет. Модуль sqlite3 входит в стандартную библиотеку Python начиная с версии 2.5. Достаточно написать import sqlite3, затем conn = sqlite3.connect(‘mydb.db’) — файл создаётся автоматически.
WAL — режим журнализации, при котором изменения записываются в отдельный файл и не блокируют чтение из основной базы. По умолчанию работает режим DELETE, блокирующий чтение при записи. Включить: PRAGMA journal_mode = wal; — настройка сохраняется в файле базы навсегда.
Технический лимит — 281 ТБ. Разработчики SQLite рекомендуют переходить на MySQL или PostgreSQL при объёмах свыше 1 ТБ или при необходимости горизонтального масштабирования.
Да, но они отключены по умолчанию из соображений обратной совместимости. Включить: PRAGMA foreign_keys = ON; — выполнять при каждом подключении, иначе SQLite не проверяет целостность ссылок между таблицами.
По умолчанию SQLite фиксирует транзакцию после каждой INSERT (autocommit), тратя 50–300 мс на сброс на диск. Решение: BEGIN TRANSACTION; … COMMIT; — вставлять порциями около 5000 строк. Дополнительно: удалить индексы перед вставкой, PRAGMA synchronous = NORMAL.
Пусть ребёнок сделает первый IT-проект уже в этом месяце
Бесплатный онлайн-курс с понятной программой, поддержкой и проектами для портфолио