Django sqlite3环境下代码迭代保留数据库内容及相关问题咨询
Django + SQLite3 常见问题解答
1. 代码迭代时如何保留数据库现有内容
核心是正确使用Django自带的迁移机制:
- 所有数据库结构变更全部通过修改
models.py实现,不要直接手动修改SQLite3的表结构 - 每次修改model后执行
python manage.py makemigrations生成迁移文件,再执行python manage.py migrate应用迁移,该操作默认只会调整表结构,不会删除已有数据 - 不要随意删除已经执行过的迁移文件,也不要随便使用
migrate --fake等强制重置迁移的操作,避免出现迁移状态混乱导致需要重建数据库 - 若你要执行删除字段、删除模型类等会涉及数据丢失的操作,Django生成迁移时会主动弹出确认提示,确认前可以先备份数据库文件规避风险
2. 拉取远程代码时如何避免本地数据库被覆盖
- 首先确保你没有将本地的SQLite3数据库文件(默认名为
db.sqlite3)提交到Git仓库,只要该文件不在Git版本控制范围内,执行git pull操作时完全不会触碰本地数据库文件 - 拉取到远程的迁移文件后,执行
migrate操作是基于你本地的数据库结构更新,只会同步表结构变更,不会覆盖已有业务数据
3. 将数据库文件加入.gitignore是否会影响后续数据库结构调整
完全不会,两者没有关联:
- Django的结构变更依赖的是
migrations目录下的迁移文件,这类文件需要正常提交到Git仓库,不要加入.gitignore - 你加入.gitignore的只是实际存储数据的SQLite3文件,不影响迁移文件的生成、提交和应用
- 修改model后,本地生成迁移文件提交到远程,其他协作者拉取迁移文件后执行
migrate,就能在各自的本地数据库上同步结构变更,流程完全正常
内容的提问来源于stack exchange,提问作者Francis Kalonji Mbuyamba
相关产品推荐
相关产品推荐

