Simon Willison 近日发布了 sqlite-utils 4.0rc1,这是该工具 v4 版本的第一个候选发布版。sqlite-utils 是一款集 Python 库与命令行工具于一体的 SQLite 数据库操作工具,在 Python 内置的 sqlite3 包之上提供了大量高级功能,包括复杂的表变换、从 JSON 数据自动建表等。
与之前的 4.0 alpha 版本相比,本次 RC 带来了两项重要新特性。首先是数据库迁移功能。该功能并非完全从零实现,而是对 Simon 几年前发布的 sqlite-migrate 包进行了小幅修改后移植而来。由于该包已在多个项目中得到长期验证,作者决定将其直接集成到 sqlite-utils 中。用户可以通过编写 migrations.py 文件定义迁移,例如创建表或添加列,然后使用 Python 代码或命令行工具 sqlite-utils migrate 来执行迁移。该迁移系统故意保持简洁,不支持反向迁移,错误可通过部署新的迁移来修正。
第二个新特性是嵌套事务支持,通过 db.atomic() 上下文管理器实现。此前,sqlite-utils 主要将事务管理留给用户自行处理。SQLite 本身通过保存点(savepoint)支持嵌套事务,db.atomic() 借鉴了 Django 和 Peewee 的术语,使得嵌套事务的使用更加便捷。用户可以在外部事务中嵌套内部事务,内部事务可以独立回滚而不影响外部事务。
此外,v4 版本引入了一些不兼容变更。例如,upsert 操作现在对高于 3.23.1 版本的 SQLite 使用 INSERT ... ON CONFLICT SET 语法,替代了原有的 INSERT OR IGNORE 加 UPDATE 模式;默认浮点列类型从 FLOAT 改为 REAL;表名和列名在模式中改用双引号而非方括号;Python 3.8 支持被移除,新增 Python 3.13 支持;以及类型检测在 CSV/TSV 导入时变为默认行为等。部分旧行为可通过参数恢复。
作者鼓励广大用户安装试用该 RC 版本,并通过 Discord 或 GitHub Issues 反馈问题。安装命令为 pip install sqlite-utils==4.0rc1。