11 июля 2026 года вышел sqlite-utils 4.1. Саймон Уиллисон добавил шесть небольших нововведений, часть которых нашёл Codex (семейство GPT-5.6 Sol) в ходе автоматического ревью открытых GitHub-issues. Это первый точечный релиз после крупного 4.0, вышедшего 7 июля 2026 года.
Контекст
sqlite-utils — CLI-инструмент и Python-библиотека для работы с SQLite: вставка данных, трансформация таблиц, произвольные запросы, экспорт. Популярен среди data engineers, журналистов данных и разработчиков, которым нужно быстро загрузить данные без ORM. Версия 4.0 вышла 7 июля 2026 года и, по словам автора, была преимущественно написана Claude Fable примерно за $149. 4.1 — уже прицельная зачистка давних запросов из backlog.
Уиллисон — один из создателей Django и один из самых активных публичных экспериментаторов с AI-assisted development. Его подходы отражают реальный сдвиг в роли разработчика: от написания кода вручную к управлению моделью, ревью результата и тестированию. В случае 4.1 он отдал Codex список открытых issues с заданием выделить самые простые — и закрыл несколько запросов, которые висели годами.
Аналитика
Два нововведения стоят особого внимания. Первое — флаг --code для команд insert и upsert: теперь можно передать блок Python-кода или путь к .py-файлу с генератором rows(). Раньше sqlite-utils уже принимал код в аргументах команды convert — теперь то же распространяется на вставку. Инструмент приближается к полноценному однострочному ETL без промежуточных файлов.
Второе — поддержка SQLite strict mode в команде transform. Strict mode запрещает записывать значения, несовместимые с типом колонки. До этого переключить таблицу в strict-режим нельзя было через ALTER TABLE — нужно было пересоздавать таблицу вручную. sqlite-utils transform именно это и делает под капотом, поэтому добавление параметра strict=True/False выглядело логичным шагом. Фича закрывает реальный болевой сценарий при миграции legacy-данных.
Паттерн разработки показателен сам по себе. Уиллисон дал Codex задачу не только написать код, но и протестировать его вручную:
use uv run python -c and manually exercise the new .transform(strict=) option, see if you can find any edge-cases or bugs
Модель нашла два бага до merge. Meta-тестирование — попросить AI протестировать свой же код через CLI — перестаёт быть экспериментом и становится частью нормального workflow.
Кейсы применения в бизнесе
B2B-SaaS стартап. Если в пайплайне есть регулярная загрузка данных из внешних API, флаг --code убирает нужду в промежуточных CSV или JSON-файлах. Достаточно написать rows()-генератор прямо в вызове CLI — подходит для небольших ETL: телеметрия, события, экспорты из CRM. Меньше точек отказа, меньше временных файлов.
Корпорация с legacy-базами. Типичная проблема — CSV-выгрузки из учётных систем, где ИНН, номера договоров или почтовые индексы теряют ведущие нули при автоматическом определении типов. Флаг --type col_name TEXT решает это явно. Плюс миграция существующих таблиц в strict mode через sqlite-utils transform --strict снижает риск тихого повреждения данных.
Малый бизнес и аналитики в КР/СНГ. sqlite-utils работает полностью локально — данные не покидают инфраструктуру. Аналитик без глубокого Python-опыта может загрузить данные из короткого генератора, запросить через stdin и сформировать отчёт — всё в одной цепочке команд, без IDE.
Кейсы в личной жизни
Разработчик. Вместо полноценного скрипта для одноразовой загрузки — короткий rows()-генератор прямо в аргументе CLI. Ускоряет хобби-проекты, парсеры, дашборды. Меньше переключений контекста между редактором и терминалом.
Контент-мейкер или журналист данных. Работа с CSV из открытых реестров — частый сценарий. Теперь можно загрузить файл с явными типами, запросить через stdin-пайп, не открывая Python-интерпретатор отдельно. Для разовых аналитических задач это существенно быстрее.
Студент или начинающий аналитик. sqlite-utils с флагом --code — хорошая точка входа в ETL без фреймворков: пишешь rows(), видишь что попало в таблицу, делаешь SELECT. Порог входа ниже, чем у pandas или dbt, а понятийная база та же.
Как применить сегодня
- Обновить:
pip install -U sqlite-utils— проверить, что версия 4.1+ - Попробовать генерацию строк:
sqlite-utils insert data.db items --code 'def rows(): yield {"id": 1, "name": "test"}' --pk id - При импорте CSV с кодами или номерами добавить явный тип:
--type zip_code TEXT - Включить strict mode для существующей таблицы:
sqlite-utils transform db.db my_table --strictили через Python —table.transform(strict=True) - При следующей AI-assisted задаче попробовать meta-тестирование: попросить модель запустить свой же код через CLI и найти edge cases перед merge