Удобный софт для работы с файлами SQLite
- пятница, 15 августа 2025 г. в 00:00:14
Все мы любим 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 настолько удобны для хранения и редактирования информации, то возникает мысль: какие инструменты лучше всего подходят для работы с этими файлами?
Все знают про коммерческих бегемотов вроде MS Access, но интересно посмотреть на бесплатные опенсорсные программы такого рода.
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 (бывший 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.
Она не позиционируется как многофункциональный инструмент, а предназначена для максимально быстрого выполнения двух простых функций:
создание БД из командной строки;
заполнение её значениями.
Библиотека спроектирована как полезное дополнение к Datasette
Вот пример по импорту базы в SQLite-utils, очистке данных и дальнейшему просмотру в Datasette:
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 ООО «МТ ФИНАНС»