SQLite для начинающих: встраиваемая БД, которая всегда с вами
Узнайте, как работать с SQLite — самой популярной встраиваемой базой данных в мире. Разбираем установку, основные команды, работу с Python и JavaScript, а также реальные примеры использования. Идеально для старта в мире баз данных.
Представьте: вы пишете приложение и вам нужна база данных. Обычно это означает установку MySQL или PostgreSQL, настройку сервера, создание пользователей, настройку безопасности... Стоп. А что если я скажу, что существует БД, которая работает без всего этого?
Знакомьтесь: SQLite. Это не просто легковесная альтернатива — это совершенно другой подход к работе с данными. И если вы начинающий разработчик, SQLite может стать вашим лучшим другом на старте карьеры.
Что такое SQLite и почему он особенный
SQLite — это встраиваемая реляционная база данных. Но что значит "встраиваемая"? В отличие от MySQL или PostgreSQL, которые работают как отдельные серверы, SQLite — это просто библиотека, которую вы подключаете к своему приложению. Вся база данных хранится в одном файле на диске.
Звучит просто? Потому что так и есть. SQLite не требует установки сервера, настройки портов или создания пользователей. Вы просто создаёте файл с расширением .db или .sqlite — и у вас есть полноценная база данных.
Вот что делает SQLite уникальным: это самая распространённая база данных в мире. Она встроена в каждый смартфон на Android и iOS, в браузеры Chrome и Firefox, в операционные системы Windows и macOS. По оценкам разработчиков, существует более триллиона активных баз данных SQLite. Да, триллиона — с двенадцатью нулями.

Где используется SQLite
SQLite отлично подходит для задач, где не нужна многопользовательская работа на уровне БД. Это десктопные приложения, мобильные приложения, встроенные системы, прототипы веб-приложений, локальное хранилище данных в браузерах.
Конкретные примеры?
Мессенджеры вроде WhatsApp используют SQLite для хранения истории переписок на вашем телефоне. Браузеры хранят в SQLite закладки, историю и cookies. Игры сохраняют в SQLite прогресс игрока. Даже Dropbox использует SQLite для синхронизации метаданных файлов.
Когда SQLite не подходит?
Если у вас высоконагруженный веб-сервис с тысячами одновременных подключений — лучше выбрать PostgreSQL. Если нужна репликация данных между серверами — SQLite не справится. Если данные измеряются терабайтами — ищите другие решения.
Установка и первые шаги
Хорошая новость: возможно, SQLite уже установлен на вашем компьютере. Откройте терминал и введите команду sqlite3 --version. Увидели версию? Отлично, можно начинать работать.
Если SQLite не установлен, процесс установки занимает минуту. На Windows скачайте предкомпилированные бинарники с официального сайта. На Linux используйте менеджер пакетов: sudo apt install sqlite3 для Ubuntu или sudo yum install sqlite для CentOS. На macOS SQLite обычно уже предустановлен, но можно обновить через Homebrew командой brew install sqlite3.
Давайте создадим первую базу данных. Откройте терминал и введите команду sqlite3 myapp.db. Вы увидите приглашение SQLite с префиксом sqlite>. Поздравляю — вы только что создали базу данных. Да, это было так просто.
Основы работы через командную строку
SQLite имеет интерактивную оболочку с полезными командами. Все специальные команды начинаются с точки. Команда .help покажет список доступных команд. Команда .databases отобразит подключенные базы данных. Команда .tables покажет все таблицы в текущей БД. Команда .schema выведет структуру всех таблиц. Команда .quit или .exit завершит работу с SQLite.
Попробуем создать первую таблицу. Допустим, мы делаем приложение для учёта задач:
CREATE TABLE tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT,
completed INTEGER DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);Что здесь происходит? Мы создали таблицу с пятью колонками. Колонка id — автоинкрементный первичный ключ, будет генерироваться автоматически. Колонка title — текст, обязательное поле. Колонка description — текст, может быть пустым. Колонка completed — число, по умолчанию 0 (используем как булев флаг). Колонка created_at — текст, автоматически заполняется текущей датой.
Обратите внимание на типы данных. SQLite использует динамическую типизацию и поддерживает пять базовых типов хранения: NULL (отсутствие значения), INTEGER (целые числа), REAL (числа с плавающей точкой), TEXT (текстовые строки) и BLOB (бинарные данные). Это проще, чем в других БД, но для большинства задач вполне достаточно.
Базовые операции с данными
Теперь добавим несколько задач в нашу таблицу:
INSERT INTO tasks (title, description)
VALUES ('Изучить SQLite', 'Прочитать статью и попробовать примеры');
INSERT INTO tasks (title, description)
VALUES ('Написать код', 'Создать простое приложение с SQLite');
INSERT INTO tasks (title)
VALUES ('Отметить задачу выполненной');Посмотрим, что получилось:
SELECT * FROM tasks;Вы увидите три записи с автоматически сгенерированными ID и датами создания. Заметьте, что в третьей записи поле description будет NULL — мы его не указали.
Давайте отметим первую задачу как выполненную:
UPDATE tasks
SET completed = 1
WHERE id = 1;Теперь выберем только невыполненные задачи:
SELECT id, title, completed
FROM tasks
WHERE completed = 0;А если нужно удалить задачу:
DELETE FROM tasks
WHERE id = 3;Эти четыре операции — SELECT, INSERT, UPDATE, DELETE — составляют основу работы с любой реляционной БД. Синтаксис SQLite практически идентичен стандартному SQL, поэтому знания легко переносятся на другие СУБД.
Работа с SQLite из Python
Лучшая часть SQLite в том, что поддержка встроена прямо в стандартную библиотеку Python. Не нужно устанавливать дополнительные пакеты — модуль sqlite3 уже есть.
Вот минимальный пример работы:
import sqlite3
# Подключаемся к БД (файл создастся автоматически)
conn = sqlite3.connect('myapp.db')
cursor = conn.cursor()
# Создаём таблицу
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')
# Добавляем пользователя
cursor.execute(
'INSERT INTO users (username, email) VALUES (?, ?)',
('john_doe', 'john@example.com')
)
# Сохраняем изменения
conn.commit()
# Получаем всех пользователей
cursor.execute('SELECT * FROM users')
users = cursor.fetchall()
for user in users:
print(f"ID: {user[0]}, Username: {user[1]}, Email: {user[2]}")
# Закрываем соединение
conn.close()Обратите внимание на вопросительные знаки в запросе INSERT. Это плейсхолдеры для параметров — правильный способ передачи данных в SQL-запросы. Никогда не используйте f-строки или конкатенацию для вставки данных в SQL — это открывает дверь для SQL-инъекций.
Более удобный способ работы — использовать контекстный менеджер:
import sqlite3
with sqlite3.connect('myapp.db') as conn:
cursor = conn.cursor()
# Получаем результаты как словари вместо кортежей
conn.row_factory = sqlite3.Row
cursor.execute('SELECT * FROM users WHERE username = ?', ('john_doe',))
user = cursor.fetchone()
if user:
print(f"Найден пользователь: {user['username']}, {user['email']}")Конструкция with автоматически закроет соединение и сохранит изменения. А row_factory = sqlite3.Row позволяет обращаться к колонкам по имени вместо индекса — намного удобнее.

Работа с SQLite из JavaScript
В Node.js самая популярная библиотека для работы с SQLite — это better-sqlite3. Она синхронная и очень быстрая.
Сначала установим пакет:
npm install better-sqlite3Теперь можем работать с базой:
const Database = require('better-sqlite3');
const db = new Database('myapp.db');
// Создаём таблицу
db.exec(`
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL NOT NULL,
stock INTEGER DEFAULT 0
)
`);
// Подготовленный запрос для вставки
const insert = db.prepare(
'INSERT INTO products (name, price, stock) VALUES (?, ?, ?)'
);
// Добавляем несколько товаров
const products = [
['Ноутбук', 45999.99, 5],
['Мышка', 599.00, 20],
['Клавиатура', 1299.00, 15]
];
for (const product of products) {
insert.run(product);
}
// Получаем все товары
const allProducts = db.prepare('SELECT * FROM products').all();
console.log('Все товары:', allProducts);
// Получаем один товар
const laptop = db.prepare('SELECT * FROM products WHERE name = ?').get('Ноутбук');
console.log('Найден товар:', laptop);
// Закрываем БД
db.close();Преимущество better-sqlite3 в том, что она синхронная — не нужно возиться с промисами и async/await для простых операций. Для более сложных сценариев в браузере используется Web SQL (устаревший) или IndexedDB, которые работают по другим принципам.
Практические советы и лучшие практики
Первое правило: всегда используйте транзакции для нескольких связанных операций. Это не только обеспечивает целостность данных, но и значительно ускоряет работу:
conn = sqlite3.connect('myapp.db')
cursor = conn.cursor()
try:
cursor.execute('BEGIN TRANSACTION')
# Множество операций вставки
for i in range(1000):
cursor.execute('INSERT INTO logs (message) VALUES (?)', (f'Log {i}',))
cursor.execute('COMMIT')
except Exception as e:
cursor.execute('ROLLBACK')
print(f'Ошибка: {e}')
finally:
conn.close()Без транзакции тысяча вставок может занять несколько секунд. С транзакцией — доли секунды.
Второй совет: используйте индексы для часто запрашиваемых колонок. Если вы часто ищете пользователей по email, создайте индекс:
CREATE INDEX idx_users_email ON users(email);Индексы ускоряют SELECT-запросы, но замедляют INSERT и UPDATE. Используйте их разумно.
Третий момент: регулярно используйте команду VACUUM для оптимизации базы данных. SQLite не освобождает место автоматически при удалении записей:
VACUUM;Эта команда перестраивает БД, освобождая неиспользуемое пространство и оптимизируя структуру файла.
Четвёртое: делайте резервные копии. SQLite — это просто файл, поэтому резервное копирование элементарно. Просто скопируйте файл .db в безопасное место. Но делайте это когда БД не используется активно, либо используйте специальные команды для онлайн-бэкапа.
Ограничения, о которых стоит знать
SQLite великолепен, но у него есть ограничения. Размер базы данных теоретически может достигать 281 терабайт, но на практике рекомендуется не превышать несколько гигабайт. SQLite использует блокировку на уровне всей базы данных — при записи другие процессы не могут читать. Это нормально для локальных приложений, но не для высоконагруженных серверов.
Нет встроенной поддержки пользователей и прав доступа — безопасность обеспечивается на уровне файловой системы. Нет репликации и кластеризации из коробки. Нет некоторых продвинутых SQL-функций вроде оконных функций (хотя базовая поддержка появилась в новых версиях).
Но для 90% задач начинающего разработчика эти ограничения не критичны. SQLite — это идеальный инструмент для обучения, прототипирования и создания локальных приложений.
Инструменты для работы с SQLite
Командная строка хороша, но иногда хочется визуальный интерфейс. Для SQLite существует множество GUI-инструментов. DB Browser for SQLite — бесплатный кроссплатформенный инструмент с открытым исходным кодом, отлично подходит для начинающих. SQLiteStudio — ещё один бесплатный вариант с поддержкой плагинов. Для профессионалов есть DataGrip от JetBrains или расширения для VS Code вроде SQLite Viewer.
Лично я рекомендую начать с DB Browser — он интуитивно понятен, позволяет визуально создавать таблицы, просматривать данные в табличном виде, выполнять SQL-запросы с подсветкой синтаксиса и экспортировать данные в различные форматы.
Практическое задание
Лучший способ научиться — практика. Попробуйте создать простое приложение для учёта расходов. База данных должна содержать таблицу с расходами (дата, категория, сумма, описание) и таблицу с категориями (название, цвет для визуализации). Реализуйте добавление нового расхода, просмотр всех расходов за определённый период, группировку расходов по категориям и расчёт общей суммы.
Это маленький проект, но он покроет все основные операции с БД и даст вам практический опыт работы с SQLite.
Заключение
SQLite — это не просто база данных для новичков. Это мощный инструмент, который используется в production миллионами приложений. Простота установки и использования делает его идеальным для обучения, а надёжность и производительность — отличным выбором для реальных проектов.
Начните с SQLite, освойте основы работы с базами данных, поймите принципы SQL — и потом переход на PostgreSQL или MySQL будет простым и естественным. Ведь концепции везде одинаковые, меняется только масштаб и количество дополнительных возможностей.
Так что устанавливайте SQLite, создавайте свои первые таблицы и начинайте экспериментировать. Это проще, чем кажется, и интереснее, чем можно представить.
Кодик — образовательная платформа для начинающих программистов с курсами по Python, JavaScript и веб-разработке.
Присоединяйтесь к нашему Telegram-сообществу разработчиков, где можно задать вопросы, получить помощь с кодом и найти единомышленников для совместного обучения.