Все расширения для SQLite
Мне очень нравится SQLite. Это миниатюрная встраиваемая база, которая отлично подходит как для исследовательского анализа данных, так и в качестве хранилища для небольших приложений (писал об этом, не буду повторяться).
Но есть у нее один недостаток: маловато встроенных функций по сравнению с PostgreSQL или Oracle. К счастью, авторы заложили в SQLite механизм расширений, на котором можно сделать почти все что угодно. В результате интернет заполнен обрывочными расширениями, которые добавляют функцию-другую.
Мне хотелось большой системности. В результате появился проект sqlean — в нем я собираю вместе недостающие в SQLite функции, распределяю их по модулям, рефакторю код, пишу тесты и документацию. Получается что-то вроде стандартной библиотеки, как в Python или Go, только для SQLite.
Список расширений
- crypto: хеш-функции, кодирование и декодирование.
- define: пользовательские функции и динамический SQL.
- fileio: чтение и запись файлов, создание каталогов.
- fuzzy: нечеткое сравнение строк, фонетические алгоритмы, транслитерация.
- ipaddr: манипуляция IP-адресами и подсетями.
- math: математические функции.
- regexp: регулярные выражения.
- stats: статистика — медиана, процентили, стандартное отклонение.
- text: работа со строками и Unicode.
- time: дата и время.
- uuid: генерация уникальных идентификаторов.
- vsv: работа с CSV-файлами как с таблицами базы.
Расширение sqlean объединяет все перечисленные в один файл, чтобы их можно было подключить разом.
Все расширения можно скачать для Windows, Linix и macOS.
Как подключить расширение
Примеры используют расширение stats; вы можете указать любое другое. Чтобы загрузить все расширения из основного набора разом, используйте расширение sqlean.
Командная строка или IDE
Если работаете с командной строкой SQLite (sqlite.exe, она же «консоль» или CLI):
sqlite> .load ./stats
sqlite> select median(value) from generate_series(1, 99);
Если используете инструмент вроде SQLiteStudio, SQLiteSpy или DBeaver:
select load_extension('c:\Users\anton\sqlite\stats.dll');
select median(value) from generate_series(1, 99);
Примечание для пользователей macOS. Макось может блокировать неподписанные бинарные файлы и запрещать загрузку расширений. Чтобы это исправить, уберите расширение из карантина, выполнив следующую команду в терминале (предварительно замените /path/to/folder на реальный путь к каталогу, в котором находится расширение):
xattr -d com.apple.quarantine /path/to/folder/stats.dylib
Python
Используйте стандартный модуль sqlite3 и загружайте расширения вручную:
import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.load_extension("./stats")
conn.execute("select median(value) from generate_series(1, 99)")
conn.close()
Node.js
Используйте пакет better-sqlite3:
const sqlite3 = require("better-sqlite3");
const db = new sqlite3(":memory:");
db.loadExtension("./stats");
db.exec("select median(value) from generate_series(1, 99)");
db.close();
Всем SQLite!