Datasette 1.0a32: минорный, но важный релиз
Разбираем Datasette 1.0a32: исправление бага INSERT ... RETURNING в /db/-/execute-write и целый ряд проблем с base_url, найденных при экспериментах с Service Workers.
Datasette 1.0a32: минорный, но важный релиз
31 мая 2026 года Саймон Уиллисон (Simon Willison) выпустил Datasette 1.0a32 — очередной alpha-релиз (предварительная версия) популярного инструмента для исследования и публикации данных с открытым исходным кодом. Несмотря на то что сам автор охарактеризовал его как «небольшой патч», за скромным описанием скрываются исправления, которые важны для разработчиков, активно использующих новый Write API и экспериментирующих с Service Workers.
Контекст: что было до 1.0a32
Чтобы понять значимость исправлений в этом релизе, нужно знать, что произошло в предыдущих версиях.
Datasette 1.0a31: большой шаг вперёд
Всего за два дня до выхода 1.0a32, 29 мая 2026 года, вышла версия 1.0a31 — один из наиболее значимых альфа-релизов за последнее время. В нём появились сразу два ключевых нововведения:
- SQL Write Queries (запросы на запись через SQL): пользователи с соответствующими правами теперь могут выполнять запросы
INSERT,UPDATE,DELETEпрямо через веб-интерфейс. - Stored Queries (сохранённые запросы, ранее «canned queries» — «консервированные запросы»): запросы теперь можно сохранять — как приватно, так и для совместного использования внутри экземпляра Datasette.
Именно появление endpoint (конечной точки API)
/db/-/execute-writeв версии 1.0a31 и стало источником бага, исправленного в 1.0a32.
Эксперименты с Service Workers
Параллельно с разработкой Datasette Саймон Уиллисон 30 мая 2026 года опубликовал исследование о запуске Python ASGI-приложений прямо в браузере с помощью Pyodide (Python-рантайм на WebAssembly) и Service Worker (фоновый скрипт браузера, перехватывающий сетевые запросы).
Идея состоит в том, чтобы Service Worker перехватывал все запросы к определённому URL-пути и передавал их Python-приложению прямо внутри браузера — без обращения к серверу. Это открывает путь к будущему обновлению Datasette Lite — браузерной версии Datasette, работающей целиком на стороне клиента.
Именно в ходе этих экспериментов был обнаружен ряд проблем с параметром base_url — базовым URL-адресом для формирования всех ссылок внутри Datasette.
Что исправлено в 1.0a32
Исправление 1: баг с INSERT ... RETURNING в /db/-/execute-write
Первое исправление касается SQL-синтаксиса INSERT ... RETURNING — конструкции, появившейся в SQLite версии 3.35.0 (март 2021 года). Она позволяет сразу после вставки строки получить значения добавленных полей — например, автоматически сгенерированный первичный ключ.
Пример такого запроса:
INSERT INTO articles (title, body)
VALUES ('Заголовок', 'Текст статьи')
RETURNING id, created_at;
При отправке подобного запроса через новый endpoint /db/-/execute-write возникала ошибка. Баг был обнаружен и оперативно устранён в 1.0a32.
/db/-/execute-write с конструкцией INSERT ... RETURNING в версии 1.0a31 — обновитесь до 1.0a32. Запросы без RETURNING работали корректно.Исправление 2: проблемы с base_url
Второй блок исправлений связан с параметром base_url — настройкой, задающей корневой путь, относительно которого Datasette формирует все внутренние ссылки, редиректы и пути к статическим файлам.
Проблемы проявились при экспериментах с Service Workers: когда приложение запускается не в корне домена (например, по адресу /app/datasette/), некорректный base_url приводит к поломке навигации, загрузки ресурсов и работы API.
Модель работы base_url в Datasette:
graph TD
A[Входящий запрос] --> B{base_url задан?}
B -- Нет --> C[Используется корень /]
B -- Да --> D[Формируется путь относительно base_url]
D --> E[Навигация и ссылки]
D --> F[Статические файлы CSS/JS]
D --> G[API endpoints /db/-/execute-write и др.]
C --> E
C --> F
C --> G
Исправления охватывают несколько сценариев, когда base_url учитывался неправильно или игнорировался при формировании ответов.
Почему Service Workers — это важно для Datasette
Эксперимент Саймона Уиллисона с запуском Python ASGI-приложений в браузере через Service Workers — это не просто академическое упражнение. Его практическая цель — обновить Datasette Lite, браузерную версию Datasette.
Старый подход Datasette Lite (используемый уже около четырёх лет) работал через Web Workers и перехват навигационных операций. Он имел критический недостаток: JavaScript внутри тегов <script> не выполнялся, что нарушало часть функциональности Datasette и большинство плагинов.
Новый подход на основе Service Workers лишён этого ограничения: браузер получает полноценные HTML-страницы, которые обрабатываются штатным движком, включая все скрипты.
Сравнение: старый и новый подход в Datasette Lite
| Характеристика | Web Workers (старый) | Service Workers (новый) |
|---|---|---|
Выполнение <script> тегов | ❌ Не работает | ✅ Работает |
| Поддержка плагинов | ⚠️ Частичная | ✅ Полная |
| Совместимость с ASGI | ✅ Да | ✅ Да |
Работа с base_url | ⚠️ Проблемы | ✅ Исправлено в 1.0a32 |
| Нужен сервер? | ❌ Нет | ❌ Нет |
| Зрелость подхода | Проверено 4+ года | Экспериментальный |
Как обновиться
Установка или обновление Datasette до версии 1.0a32 выполняется стандартно через pip:
# Установка с нуля
pip install datasette==1.0a32
# Обновление существующей установки
pip install --upgrade datasette==1.0a32
# Проверка версии
datasette --version
Чтобы быстро попробовать Datasette на своих данных, достаточно трёх команд:
pip install datasette==1.0a32
sqlite3 mydata.db "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);"
datasette mydata.db
После этого откройте браузер по адресу http://localhost:8001.
Итог
Datasette 1.0a32 — типичный пример «технического долга в движении»: активная разработка крупных возможностей (Write API, Service Workers) неизбежно порождает мелкие баги, которые так же оперативно исправляются. Исправление INSERT ... RETURNING в новом endpoint и серия патчей для base_url — небольшие, но принципиально важные шаги на пути к стабильному релизу 1.0.
Проект активно развивается: только за последнюю неделю мая 2026 года вышли версии 1.0a30, 1.0a31 и 1.0a32. Следить за обновлениями можно в блоге Саймона Уиллисона и на странице релизов GitHub.
Если вы используете Datasette в production или активно тестируете alpha-версии — 1.0a32 стоит установить уже сейчас, особенно если в вашем стеке есть запросы с INSERT ... RETURNING или нестандартный base_url.