Медиаблог /

Что такое SQLite: встраиваемая СУБД без сервера — установка и работа

21 июля 2026

Что такое SQLite: встраиваемая СУБД без сервера — установка и работа

SQLite — встраиваемая реляционная система управления базами данных без отдельного серверного процесса: все данные хранятся в одном файле с расширением .db или .sqlite. Движок работает внутри вашего приложения, поставляется под лицензией Public Domain и входит в стандартные библиотеки Python и PHP. Полностью поддерживает ACID-транзакции (атомарность, согласованность, изолированность, долговечность) и работает на Windows, macOS, Linux, iOS, Android и встраиваемых устройствах. Термин «serverless» (бессерверный) разработчики SQLite ввели в 2007 году — за семь лет до AWS Lambda.

Схема сравнения SQLite один файл и клиент-серверная архитектура MySQL

Что такое SQLite — определение и архитектура

SQLite — встраиваемая реляционная СУБД, в которой вся база данных хранится в одном обычном файле на диске. Никакого отдельного процесса, никакой настройки сетевых портов — приложение открывает файл и сразу работает через стандартный SQL.

image

Не знаете, с чего ребёнку начать в IT?

Дайте попробовать разные направления: Python, веб-разработку и робототехнику

Смотреть программу

Надёжность проекта подтверждена цифрами: около 2 млн автоматических тестов, покрытие кода на уровне 100% MC/DC (Modified Condition/Decision Coverage — критерий полного покрытия ветвей и условий) начиная с 2009 года, соотношение объёма тестов к объёму кода — 590:1. Технический лимит размера базы — 281 ТБ, что опровергает расхожий миф об SQLite как об «игрушечной» системе.

Ключевые характеристики SQLite

Пять атрибутов, отличающих SQLite от клиент-серверных баз данных:

  • Бессерверность — нет отдельного процесса, нет конфигурации, нет сетевого стека.
  • Один файл — вся база (схема, данные, индексы) в одном .db/.sqlite-файле, который можно скопировать или переслать как обычный документ.
  • Public Domain — никаких лицензионных ограничений, встраивайте куда угодно.
  • Кроссплатформенность — файл открывается на любой ОС без конвертации.
  • Полная ACID-совместимость — обеспечивается через журнализацию транзакций.

Каждая строка в SQLite имеет виртуальный 64-битный столбец rowid; INTEGER PRIMARY KEY — его псевдоним. Внешние ключи (foreign keys) поддерживаются, но отключены по умолчанию из соображений обратной совместимости — включать через PRAGMA foreign_keys = ON; при каждом новом подключении.

Хотите освоить программирование и работу с базами данных с нуля? На курсе «Программирование: Уверенный старт» школьники создают реальные проекты — от Telegram-бота на Python до полноценного веб-приложения — и формируют портфолио. Узнайте подробнее на странице курса.

Где применяется SQLite

Четыре категории задач, где SQLite — первый выбор:

  • Мобильные приложения — iOS и Android используют SQLite как встроенное хранилище по умолчанию.
  • Браузеры — Chrome и Firefox хранят историю, куки и кэш в SQLite-файлах.
  • IoT и умный дом — ресурсоёмкие СУБД не помещаются в ограниченную память встраиваемых устройств.
  • Десктопные приложения — один файл базы проще в развёртывании, чем отдельный сервер.

В production-окружениях SQLite несёт реальную нагрузку: Nomadlist и RemoteOK обрабатывают свыше 50 млн запросов в месяц на VPS за $40, Expensify и Tailscale применяют SQLite в корпоративных системах.

SQLite, MySQL или PostgreSQL — что выбрать

Три СУБД решают разные задачи, и выбор зависит от архитектуры проекта, а не от популярности технологии. SQLite встраивается без DevOps-нагрузки. MySQL и PostgreSQL работают по клиент-серверной модели: отдельный процесс, настройка, администрирование. По мере того как разработчики возвращаются к монолитам и простым стекам, SQLite всё чаще появляется там, где раньше автоматически ставили MySQL.

Сравнительная таблица SQLite, MySQL и PostgreSQL

Параметр
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, а когда нет

SQLite подходит для малых и средних проектов, прототипов, мобильных и IoT-приложений, десктопного программного обеспечения, тестовых окружений, а также для систем объёмом до 1 ТБ с одним пишущим процессом.

Переходите на MySQL или PostgreSQL, когда нужно:

  • горизонтальное масштабирование на несколько серверов;
  • высокие параллельные записи от множества процессов;
  • 40+ специализированных типов данных.

Как установить SQLite — скачать sqlite3

Три шага установки SQLite на Windows macOS и Linux

Официальный источник — страница загрузок SQLite: готовые бинарники для всех операционных систем. Основной инструмент разработчика — интерфейс командной строки (CLI) sqlite3, который позволяет создавать базы, выполнять SQL-запросы и управлять схемой без дополнительного программного обеспечения.

Установка SQLite на Windows

  1. Перейдите на sqlite.org/download.html и скачайте архив sqlite-tools-win-x64 из раздела Precompiled Binaries for Windows.
  2. Распакуйте архив в удобную папку, например C:\sqlite.
  3. Запустите sqlite3.exe через командную строку.

Создание новой базы данных: sqlite3 mydb.db — если файл не существует, SQLite создаёт его автоматически. Основные команды для навигации в CLI:

  • .tables — список всех таблиц;
  • .schema users — структура таблицы users;
  • .save filename.db — сохранить текущую базу в файл;
  • .quit — выйти из CLI.

Установка SQLite на macOS и Linux

На macOS удобнее всего через Homebrew: brew install sqlite. На Debian/Ubuntu: sudo apt-get install sqlite3. Проверить версию после установки: sqlite3 —version.

Для тестов и экспериментов удобна база в оперативной памяти без файла на диске: sqlite3 :memory: — данные исчезнут при завершении сессии.

SQLite в Python — работа с модулем sqlite3

Модуль sqlite3 входит в стандартную библиотеку Python начиная с версии 2.5 — устанавливать ничего дополнительно не нужно. Общий порядок работы с базой данных: connect → cursor → execute → fetchall → commit.

Модуль sqlite3 стандартной библиотеки Python

sqlite3.connect(‘mydb.db’) создаёт файл автоматически, если его нет. Для работы с базой в оперативной памяти без файла: sqlite3.connect(‘:memory:’).

Полезная настройка: conn.row_factory = sqlite3.Row возвращает строки как объекты с доступом по имени столбца — по аналогии со словарём (dict). Рекомендуемый паттерн — контекстный менеджер:

with sqlite3.connect(‘mydb.db’) as conn:

# автоматический коммит или откат при ошибке

Подробнее — в официальной документации модуля sqlite3.

Подключение, cursor и базовые операции CRUD

Код Python с sqlite3 — connect cursor execute fetchall commit

Базовые операции с данными — 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() — только первую.

UPSERT — INSERT OR REPLACE и ON CONFLICT

SQLite поддерживает два варианта операции «вставить или обновить» (UPSERT):

Ребенок хочет изучать программирование? Пусть начнёт с реальных проектов

На курсе школьники создают Telegram-бота, сайт и веб-приложение

  • Бесплатно — 0 ₽ за обучение
  • Портфолио — 4 готовых проекта
  • 7–11 классы — Онлайн, с нуля
Оставить заявку
image

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 и динамическая типизация

SQLite оперирует пятью хранимыми классами данных против 20+ у MySQL и 40+ у PostgreSQL. Ключевое отличие — механизм Type Affinity (сродство типов): динамическая типизация, которой нет у большинства других реляционных СУБД.

Пять хранимых классов данных SQLite

Класс
Описание
Примеры значений
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 корректно работает и без него.

Type Affinity — как работает динамическая типизация

В MySQL и PostgreSQL тип столбца жёстко ограничивает, что можно в нём хранить. В SQLite тип столбца задаёт аффинность — правило сравнения и преобразования данных, а не запрет на хранение.

Пример: в столбец с аффинностью INTEGER можно записать строку «123» — SQLite преобразует её в число 123. Строку «abc» в тот же столбец — сохранит как TEXT без ошибки. Пять аффинностей: INTEGER, REAL, TEXT, BLOB, NUMERIC. SQLite анализирует объявленный тип столбца (например VARCHAR(255)) и сопоставляет с ближайшей аффинностью — это обеспечивает совместимость с SQL-кодом, написанным для MySQL или PostgreSQL. Библиотеки объектно-реляционного отображения (ORM), например SQLAlchemy, автоматически абстрагируют эти различия.

Инструменты для работы с файлами SQLite

Файл .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 — скачать и возможности

Интерфейс SQLiteStudio с открытой таблицей users и данными

SQLiteStudio — самый популярный GUI-менеджер для SQLite. Распространяется бесплатно под лицензией GPL, работает на Windows, macOS и Linux. Отличительная черта — portable-версия: скачали архив, распаковали, запустили без каких-либо шагов установки.

Основные функции: визуальный редактор схем без написания SQL, консоль с автодополнением запросов, импорт и экспорт в форматах CSV, JSON, XML. Скачать: sqlitestudio.pl.

DB Browser for SQLite

DB Browser for SQLite (лицензия MPL2 + GPL3) ориентирован на пользователей без опыта работы с SQL: данные редактируются прямо в таблице как в Excel, структура создаётся через визуальный интерфейс. Portable-версии нет. Поддерживаемые платформы: Windows, macOS, Linux. Скачать: sqlitebrowser.org.

Онлайн-просмотрщики SQLite и ODBC-драйвер

Открыть файл .db без установки программ: sqliteonline.com и SQLiteViewer.app — загружаете файл в браузере и выполняете базовые SQL-запросы прямо там.

Стандартный интерфейс подключения к базам данных (ODBC, Open Database Connectivity) позволяет подключить SQLite к Excel, Power BI и другим BI-инструментам как обычный источник данных. Скачать со страницы загрузок SQLite.

Write-Ahead Logging и SQLite в production

Главное ограничение SQLite в многопользовательских сценариях — параллельная запись. По умолчанию запись блокирует весь файл базы. Журнализация с упреждающей записью (WAL, Write-Ahead Logging) решает эту проблему и открывает SQLite дорогу в настоящие production-окружения.

WAL — активация и принцип работы

Блок-схема сравнения режимов журнала SQLite DELETE и WAL

В стандартном режиме DELETE (по умолчанию) запись устанавливает эксклюзивную блокировку всего файла — параллельное чтение в этот момент невозможно, приложение получает ошибку SQLITE_BUSY.

WAL меняет механизм: изменения записываются в отдельный журнальный файл (.db-wal), основной файл базы остаётся доступным для чтения одновременно. Периодически происходит checkpoint — перенос накопленных изменений из журнала в основной файл. Дополнительно создаётся файл .db-shm (разделяемая память для координации читателей и писателей).

Активация: PRAGMA journal_mode = wal; — выполнить один раз. Настройка сохраняется в файле базы навсегда, повторять при каждом подключении не нужно.

SQLite в production — подтверждённые примеры

Примеры использования SQLite в продакшене — Nomadlist Expensify Tailscale Fly.io

SQLite справляется с нагрузками, которые принято считать уделом клиент-серверных СУБД:

  • Nomadlist и RemoteOK — более 50 млн запросов в месяц на одном VPS за $40, вся база в SQLite с включённым WAL.
  • Expensify — корпоративное управление финансами и чеками.
  • Tailscale — хранение конфигурации сети.
  • Fly.io (LiteFS) — распределённая edge-база на основе SQLite с файловой репликацией.

Надёжность подтверждена тестированием: около 2 млн тестов, соотношение тест-код 590:1, 100% покрытие MC/DC с 2009 года. Разработчики SQLite управляют исходным кодом через Fossil VCS — собственную систему контроля версий, построенную на SQLite.

Часто задаваемые вопросы

Чем SQLite отличается от MySQL и PostgreSQL?

SQLite работает без отдельного серверного процесса — вся база в одном файле. MySQL и PostgreSQL требуют установки и настройки сервера. SQLite встроена в Python и PHP, быстрее в одиночных операциях, но уступает при высоких параллельных записях и не поддерживает горизонтальное масштабирование без дополнительных инструментов.

Как открыть файл .db или .sqlite без специальных программ?

Файл SQLite бинарный — в текстовом редакторе нечитаем. Варианты: SQLiteStudio (sqlitestudio.pl), DB Browser for SQLite (sqlitebrowser.org), онлайн-сервис sqliteonline.com или командная строка sqlite3 mydb.db.

Как обновить запись в SQLite?

Используйте: UPDATE users SET email = ‘new@email.com’ WHERE id = 1;. Без условия WHERE обновятся все строки таблицы. Для вставки или обновления одной командой: INSERT OR REPLACE INTO … или INSERT INTO … ON CONFLICT DO UPDATE SET ….

Нужно ли устанавливать sqlite3 для Python?

Нет. Модуль sqlite3 входит в стандартную библиотеку Python начиная с версии 2.5. Достаточно написать import sqlite3, затем conn = sqlite3.connect(‘mydb.db’) — файл создаётся автоматически.

Что такое WAL в SQLite и зачем его включать?

WAL — режим журнализации, при котором изменения записываются в отдельный файл и не блокируют чтение из основной базы. По умолчанию работает режим DELETE, блокирующий чтение при записи. Включить: PRAGMA journal_mode = wal; — настройка сохраняется в файле базы навсегда.

Какой максимальный размер базы данных SQLite?

Технический лимит — 281 ТБ. Разработчики SQLite рекомендуют переходить на MySQL или PostgreSQL при объёмах свыше 1 ТБ или при необходимости горизонтального масштабирования.

Поддерживает ли SQLite внешние ключи?

Да, но они отключены по умолчанию из соображений обратной совместимости. Включить: PRAGMA foreign_keys = ON; — выполнять при каждом подключении, иначе SQLite не проверяет целостность ссылок между таблицами.

Почему SQLite тормозит при массовой вставке данных?

По умолчанию SQLite фиксирует транзакцию после каждой INSERT (autocommit), тратя 50–300 мс на сброс на диск. Решение: BEGIN TRANSACTION; … COMMIT; — вставлять порциями около 5000 строк. Дополнительно: удалить индексы перед вставкой, PRAGMA synchronous = NORMAL.

Пусть ребёнок сделает первый IT-проект уже в этом месяце

Бесплатный онлайн-курс с понятной программой, поддержкой и проектами для портфолио

  • Онлайн
  • 4 недели
  • Бесплатно
  • Школьникам 7–11 классов
Подать заявку
icon