APSW, обёртка для SQLite на Python: весь C API и поддержка async

APSW, обёртка для SQLite на Python: весь C API и поддержка async

Это страница проекта APSW на GitHub (README), а не анонс релиза. APSW расшифровывается как Another Python SQLite Wrapper, «ещё одна обёртка SQLite для Python». Она нужна, чтобы выжать максимум из встраиваемой реляционной СУБД SQLite средствами Python и, наоборот, максимум из Python со стороны SQLite. Поддерживается CPython 3.10 и новее.

По описанию проекта, APSW «склеивает» полный C API SQLite и C API Python и остаётся актуальной по отношению к обеим сторонам, и к SQLite, и к Python. В перечень доступной функциональности входят полнотекстовый поиск, расширение session, виртуальные таблицы, VFS (виртуальная файловая система), JSON и CArray. Вся функциональность доступна в обычном синхронном коде, а также заявлена полная поддержка всех async-фреймворков (асинхронных библиотек Python).

Проект честно разграничивает сферы применения. Если нужно, чтобы SQLite выглядел взаимозаменяемым с другими драйверами баз данных, README рекомендует встроенный модуль sqlite3. APSW предлагается брать тогда, когда хочется использовать SQLite полностью и получить более удобную работу для разработчика. Отличия APSW от sqlite3 описаны в отдельном разделе документации.

Для знакомства есть обзорный тур с примерами кода и актуальная документация на сайте проекта. Вопросы лучше задавать в группе обсуждения Python SQLite (она указана как предпочтительный канал), в обсуждениях на GitHub или письмом автору. Релизы выходят на PyPI (ставятся через pip) и на GitHub; о новых выпусках сообщают в группе обсуждения, а на PyPI есть RSS-лента. Ошибки заводятся через раздел Issues на GitHub. Лицензия, по существу любая открытая лицензия, одобренная OSI.

Ключевые факты

  • APSW (Another Python SQLite Wrapper), обёртка SQLite для Python, которая связывает полный C API SQLite с C API Python.
  • В перечень возможностей входят полнотекстовый поиск, session, виртуальные таблицы, VFS, JSON и CArray.
  • Вся функциональность доступна в обычном синхронном коде; также заявлена полная поддержка всех async-фреймворков.
  • Для взаимозаменяемости с другими драйверами баз данных README рекомендует встроенный модуль sqlite3; APSW, когда нужно использовать SQLite полностью.
  • Поддерживается CPython 3.10 и новее; релизы выходят на PyPI и GitHub; лицензия, в сущности любая открытая лицензия, одобренная OSI.

Почему это важно

Встроенный модуль sqlite3 покрывает типовые задачи, но SQLite умеет больше, чем обычно открывает стандартный интерфейс драйвера. APSW позиционируется как способ получить доступ ко всему C API SQLite из Python: виртуальные таблицы, VFS, расширение session, полнотекстовый поиск, JSON и CArray. Это не новая разработка, а описание уже существующего проекта, и важна она прежде всего тем, что чётко формулирует, когда стоит выходить за пределы встроенного модуля.

Кому это важно

Разработчикам на Python, которые используют SQLite не как простое хранилище, а как инструмент с расширениями: тем, кому нужны виртуальные таблицы, собственная виртуальная файловая система, полнотекстовый поиск или работа с сессиями. Также тем, кто пишет асинхронный код: в README заявлена полная поддержка всех async-фреймворков, хотя конкретные фреймворки там не названы.

Как это применить

Если задача укладывается в обычную работу с базой и нужна взаимозаменяемость с другими драйверами, README советует встроенный sqlite3. Если нужно использовать SQLite полностью, берите APSW: ставится через pip с PyPI, требует CPython 3.10 или новее. Начать удобно с обзорного тура и примеров кода в документации, а различия между APSW и sqlite3 смотреть в соответствующем разделе документации. Лицензия описана как «в сущности любая открытая лицензия, одобренная OSI»; точные условия, в файле LICENSE.

Можно ли доверять

Источник, собственный README проекта, то есть самоописание автора, а не независимая оценка. Заявления о полноте покрытия C API и о поддержке async-фреймворков в тексте ничем не подкреплены: бенчмарков, сравнения производительности со встроенным sqlite3, данных о числе пользователей или загрузок нет. Номер версии и дата релиза в тексте не указаны. По описанию проект остаётся актуальным по отношению к SQLite и Python, но этот пересказ опирается только на README.

Риски и подводные камни

APSW не взаимозаменяем с другими драйверами баз данных так, как sqlite3, сам README указывает на это и рекомендует встроенный модуль для такого случая. Конкретный перечень отличий в тексте не приведён, только отсылка к разделу документации, поэтому перед переходом с sqlite3 нужно изучить его. Поддерживается CPython 3.10 и новее, так что на более старых версиях Python библиотека не подойдёт. Точное название лицензии в README не названо, поэтому юридические условия стоит проверять по файлу LICENSE.