
Все мы любим SQLite. Это идеальный движок БД, быстрая компактная библиотека размером менее 1 МБ, автономная и практически неубиваемая. Это вообще удобный способ хранения информации, поскольку СУБД выигрывает у файловой системы по скорости доступа, сжатию, функциональности полнотекстового поиска и т. д. Например, она вдвое быстрее файловой системы Ext4 под Linux.
SQLite — самая популярная в мире СУБД. Как уже рассказывалось в статье «Безумные и забавные факты о SQLite», в мире активно используется более триллиона (!) БД SQLite, это невероятное число. Просто она встроена во все смартфоны, браузеры, операционные системы и бесчисленное число других приложений.
Как гласит официальный сайт, SQLite — это библиотека на языке C, которая реализует полнофункциональный SQL-движок базы данных.
Формат файлов SQLite стабилен, кроссплатформен и обратно совместим, и разработчики обязуются поддерживать его до 2050 года. Файлы БД SQLite часто используются в качестве контейнеров для передачи контента между системами и в качестве архивного формата для долгосрочного хранения.
Исходный код SQLite находится в общественном достоянии вообще без лицензии и доступен всем для использования в любых целях. Забавно, что проект поддерживают всего три человека, которые не допускают внешних контрибьюторов. В данный момент имена авторов держатся в секрете и удалены с официального сайта во избежание сталкинга.
Последняя версия библиотеки SQLite — 3.50.1, от 6 июня 2025 года.
Среди всех программных компонентов и библиотек SQLite входит в пятёрку самых популярных в мире, вместе с оригинальной реализацией zlib, оригинальным libpng и официальной библиотекой Libjpeg. На этих компонентах держится современная IT-индустрия: библиотеки для графики PNG и JPEG, сжатие данных zlib и наша СУБД SQLite.
Формат файлов
SQLite используется как формат файлов для самых разных приложений: системы контроля версий, инструменты финансового анализа, редакторы медиафайлов, CAD-пакеты, программы для ведения учёта и т. д. Традиционная команда «Открыть файл» в приложении просто вызывает sqlite3_open()
. Обновления происходят автоматически по мере изменения содержимого приложения.
Как мы уже упоминали, SQLite в качестве формата файлов имеет множество преимуществ, это действительно серьёзная СУБД:
Чтение и запись из базы данных SQLite зачастую быстрее, чем из файловой системы.
Приложение загружает только нужные данные, а не читает весь файл и держит его в памяти. Например, можно разместить БД SQLite на GitHub Pages или любом статичном хостинге — и запрашивать с клиента только нужную информацию:

Небольшие изменения перезаписывают только те части файла, которые изменяются, что сокращает время записи и износ SSD.
Чтение и обновление контента лаконичными SQL-запросами.
Формат файла может быть расширен в будущих версиях просто добавлением новых таблиц и/или столбцов, с сохранением обратной совместимости.
Приложения могут использовать полнотекстовый поиск, индексы RTREE, а также триггеры для реализации автоматизированного стека undo/redo:
Вот полнотекстовый поиск:
create virtual table books_fts
using fts5(title, author, publisher);
insert into books_fts
select title, author, publisher from books;
select
author,
substr(title, 1, 30) as title,
substr(publisher, 1, 10) as publisher
from books_fts
where books_fts match 'ann'
limit 5;
┌─────────────────────┬────────────────────────────────┬────────────┐
│ author │ title │ publisher │
├─────────────────────┼────────────────────────────────┼────────────┤
│ Ruby Ann Boxcar │ Ruby Ann's Down Home Trailer P │ Citadel │
│ Ruby Ann Boxcar │ Ruby Ann's Down Home Trailer P │ Citadel │
│ Lynne Ann DeSpelder │ The Last Dance: Encountering D │ McGraw-Hil │
│ Daniel Defoe │ Robinson Crusoe │ Ann Arbor │
│ Ann Thwaite │ Waiting for the Party: The Lif │ David R. G │
└─────────────────────┴────────────────────────────────┴────────────┘
Файл приложения переносим между всеми операционными системами и архитектурами.
Несколько процессов подключаются к одному файлу, читают и пишут данные, не мешая друг другу.
Разнообразный контент из кучи файлов инкапсулируется в один файл для более простой передачи.
Содержимое обновляется непрерывно и атомарно, чтобы минимизировать потери при отключении питания или сбое.
SQL-запросы в несколько раз меньше эквивалентного процедурного кода, и поскольку количество ошибок на строку кода примерно постоянно, это означает меньшее количество ошибок в целом.
Содержимое БД SQLite можно просматривать с помощью множества сторонних инструментов.
Файлы БД SQLite рекомендуются Библиотекой Конгресса США для долгосрочного сохранения цифрового контента.
SQLite допускает любые кастомные расширения файлов, что тоже удобно.
Инструменты для работы с SQLite
Если файлы SQLite настолько удобны для хранения и редактирования информации, то возникает мысль: какие инструменты лучше всего подходят для работы с этими файлами?
Все знают про коммерческих бегемотов вроде MS Access, но интересно посмотреть на бесплатные опенсорсные программы такого рода.
SQLiteStudio
SQLiteStudio — удобная программа для создания, редактирования и просмотра баз данных SQLite.

Кроссплатформенная программа, работает под Linux, Windows и MacOS, с открытым исходным кодом. Есть портативная версия, которая запускается без инсталляции.
Разработкой с 2007 года в одиночку занимается польский программист Павел Салава — в формате любительского пет-проекта.

Он говорит, что на момент создания это был первый в мире полноценный менеджер баз SQLite. В наше время появились и другие похожие программки, такие как DB Browser for SQLite (DB4S).

Но по сравнению с ними у SQLiteStudio гораздо больше функций, он проще в использовании и производительнее в операциях вроде импорта БД. Говорят, что летает даже на старых ПК.
Основные функции:
Продвинутый редактор SQL с подсветкой синтаксиса SQL и подсказками, форматированием кода, подчёркиванием ошибок. Например, можно кликнуть мышкой с нажатым Ctrl по названию таблицы в запросе — и она откроется (или индекс, или триггер).
Зашифрованные защищённые паролем БД, поддерживаются SQLCipher, WxSQLite3 и System.Data.SQLite:

SQL-запросы к нескольким БД.
Пользовательские SQL-функции, которые можно реализовать на JavaScript, Python или Tcl, есть репозиторий готовых скриптов.
Собственные последовательности сортировки (алгоритмы для сравнения значений).
История запросов.
Перетягивание мышкой таблиц и индексов между базами.
Автоматическое заполнение случайными значениями. Очень полезная функция: например, для презентации перед клиентом можно создать демонстрационную БД, заполнить её сгенерированными значениями и составить несколько SQL-запросов, чтобы показать, как будет работать реальная готовая система, которую вы намерены разработать.
Импорт из CSV или любого текстового файла, экспорт в SQL-запросы, CSV, HTML, XML, PDF, JSON.
Скрипты JavaScript, Python и Tcl в качестве генераторов для заполнения данных, пользовательских SQL-функций, последовательностей сортировки.
Плагины нескольких категорий: языки скриптов, форматы импорта/экспорта, форматы БД, подсветка кода, рендерер ячеек и др.

Изначально программа была реализована на Tcl/Tk, с третьей версии полностью переписана на C++/Qt.
Trilogy: альтернативный SQL
Trilogy (бывший PreQL) — это SQL-подобный язык, который позиционируется как семантический или более высокоуровневый слой для SQL.
Его можно напрямую использовать в качестве замены джойнам и group_by
. Есть проверка типов, поддержка import
в стиле Python для повторного использования и иерархических запросов. Синтаксис Trilogy компилируется в различные диалекты SQL (по умолчанию DuckDB).
Семантическими моделями можно делиться, комбинировать и итеративно дорабатывать в интерактивных сессиях, сохраняя кастомные рабочие процессы.
Более высокий уровень абстракции помогает более надёжно использовать SQL для LLM. Для нейронок спроектирован дополнительный пакет Trilogy NLP (pytrilogy-nlp
).
Пока что Trilogy находится в стадии эксперимента, можно попробовать в онлайн-демо.
Например, вот фрагмент кода PRQL:
# model logic is written first
# with a pure semantic model
const greeting <- 'Hello'; # comments describe fields
key noun string; # people, places, things
# that you bind to data
datasource things (
thing:noun
)
grain (noun)
query '''
select unnest(['world', 'friend', 'visitor']) as thing
''';
# with reusable functions
def initcap(word)-> upper(substring(word, 1, 1)) || substring(word,2, len(word));
# and run queries in familiar SQL syntax
WHERE noun like '%world%' or noun = 'friend'
SELECT
greeting || ' ' || @initcap(noun) || '!' as salutation,
rank salutation by len(salutation) asc as brevity_rank
;
Результат выполнения:
salutation |
brevity_rank |
---|---|
Hello World! |
1 |
Hello Friend! |
2 |
Соответствующий код SQL, который генерируется в процессе:
WITH
highfalutin as (
SELECT
things."thing" as "noun"
FROM
(
select unnest(['world', 'friend', 'visitor']) as thing
) as things
WHERE
CASE WHEN things."thing" like '%world%' THEN True ELSE False END or things."thing" = 'friend'
),
wakeful as (
SELECT
(((:greeting || ' ') || (UPPER(SUBSTRING(highfalutin."noun",1,1)) || SUBSTRING(highfalutin."noun",2,length(highfalutin."noun")))) || '!') as "salutation"
FROM
highfalutin
WHERE
CASE WHEN highfalutin."noun" like '%world%' THEN True ELSE False END or highfalutin."noun" = 'friend'
)
SELECT
wakeful."salutation" as "salutation",
rank() over (order by length(wakeful."salutation") asc ) as "brevity_rank"
FROM
wakeful
SQLite-utils
SQLite-utils — утилита командной строки и питоновская библиотека для работы с базами данных SQLite.
Она не позиционируется как многофункциональный инструмент, а предназначена для максимально быстрого выполнения двух простых функций:
создание БД из командной строки;
заполнение её значениями.
Библиотека спроектирована как полезное дополнение к Datasette
Вот пример по импорту базы в SQLite-utils, очистке данных и дальнейшему просмотру в Datasette:
SQLite Page Explorer
SQLite Page Explorer — маленькое GUI-приложение со встроенным сервером redbean для просмотра баз SQLite «постранично», как их видит сам движок:

SQLite, как большинство СУБД, хранит данные в страницах размером с блок на диске, это нааименьшая единица хранения данных в файловой системе, обычно 4 КБ. Минимальный размер страниц максимально ускоряет чтение и запись.
Обычно разработчики взаимодействуют с базой данных на уровне её схемы или структуры — то есть таблиц, строк и SQL. Но представление на уровне страницы даёт интересные инсайты:
Как индексы на самом деле выглядят на диске (это по сути отдельные маленькие таблицы).
Как более компактно хранить данные (и таким образом ускорить запросы и повысить производительность приложения).
Некоторые проблемы и неэффективности не заметны в схеме, а здесь их видно.
Представление о B-деревьях, одной из самых важных структур данных в вычислениях. Это основа большинства файловых систем и баз данных.
Благодаря магии redbean исполняемый файл sqlite-page-explorer.com
размером 6,5 МБ запускается и работает нативно на Windows, Linux, MacOS и различных BSD, на любых архитектурах: ARM64 и x64:

Из других менеджеров можно упомянуть DbVisualizer, DbGate и DBeaver — универсальный менеджер для всех популярных БД SQL, таких как MySQL, MariaDB, PostgreSQL, SQLite, Apache Family и др.

Конечно, работать с базой можно из консоли:

Но графический интерфейс помогает быстрее понять и визуально оценить структуру БД. Бывает, что он просто незаменим, например, для визуализации RTL-текста, если тот присутствует в некоторых колонках. Такой текст (арабский, иврит и проч.) плохо поддерживается в консольных редакторах.
Кроме того, в графическом интерфейсе даже начинающие пользователи могут отлично работать с СУБД, почти как с электронными таблицами типа Excel.
© 2025 ООО «МТ ФИНАНС»
sintech
HeidiSQL тоже неплохо работает с SQLite.