主要观点:公司使用小型 SQLite 数据库,通过在单个 SQL 文件中定义模式,应用启动时自动创建新表、列或索引,优于显式数据库迁移脚本。
关键信息:
- 定义数据库模式的单个文件为schema.sql,包含CREATE TABLE和CREATE INDEX语句。
- 启动应用时创建新内存数据库并执行模式,通过查询内部表比较“纯净”和“实际”数据库以检测变化。
- 可通过特定技术生成实体关系图,技术与 ORM 无关,可自定义数据库模式。
- 模式更改限制在特定操作,不支持触发器和视图,不进行数据迁移,手动迁移可在自动迁移后进行。
- 单元测试创建内存数据库,集成测试复用跨 CI 运行的数据库,CI 前运行迁移器降级。
重要细节: - 自动迁移代码保证数据库模式与 SQL 文件匹配,可降级(删除表或列,需注意数据丢失)。
- 检测现有表变化使用[PRAGMA table_info],改变列类型需遵循特定步骤避免破坏外键。
- 手动迁移可在自动迁移前通过写 SQL 语句(如DROP TABLE IF EXISTS),数据迁移需手动编写。
- 代码包含[migrator.py]和[Unit tests],发布于 2019 - 2022 年,遵循 MIT 许可证。部分设计和代码由同事[William Manley]完成,受[liyanchang 的 Hacker News 评论]启发。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。