尝试Django迁移并在失败时回滚的管理命令
项目描述
django-migrate-or-rollback
虽然Django的单个迁移是原子的(只要它们有默认的 atomic=True),但是一组迁移不是。因此,在运行迁移时,你可能会遇到部分失败的情况,即某些迁移成功而其他迁移失败。这个库可以解决这个问题。
这个库提供了一个新的管理命令 migrate_or_rollback。它是Django内置管理命令 migrate 的直接替代品。以下是它是如何工作的:
- 检查您的数据库和当前的迁移文件,以确定每个Django应用程序运行的最新迁移。
- 正常运行迁移。
- 如果迁移失败,则回滚到步骤1中确定的迁移。
安装
pip安装django-migrate-or-rollback
或者,将 django-migrate-or-rollback 添加到您的 requirements.txt 文件中。
然后,在 settings.py 中的 INSTALLED_APPS 中添加 "django_migrate_or_rollback",如下所示
# settings.py
INSTALLED_APPS = [
# ...
"django_migrate_or_rollback",
]
用法
运行 python manage.py migrate_or_rollback 而不是标准的 migrate 命令。
特别是,您应该在您的部署脚本或CI/CD系统中用 migrate_or_rollback 替代 migrate。
migrate_or_rollback 与 migrate 有相同的所有选项,例如 --noinput 标志。
警告
这个库假设您的迁移是可以逆回滚的。并非所有迁移都可以逆回滚。此外,回滚迁移只会逆转架构,而不会回滚数据库内容。
特别是
- 已删除的数据(例如删除列或表)通过回滚删除迁移不会恢复。为了避免这种情况,你应该在一个部署中使字段可空,在下一个部署中删除它们。
- 缺少
reverse函数的RunPython语句在回滚时会出错。至少,添加migrations.RunPython.noop作为反向函数。此外,RunPython 反向函数可以用于在迁移回滚时回滚数据库内容的变化。 - 删除不可空字段的迁移在回滚时会出错。为了避免这种情况,在一个部署中使字段可空,在下一个部署中删除它。
项目详情
关闭
django-migrate-or-rollback-0.0.2.tar.gz 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 30c790743b076cf6493cd59f165fc7de21be417116c611ef8574ff4effa7b50f |
|
| MD5 | b782b0e519d922c607a817437e31861c |
|
| BLAKE2b-256 | 1ee7da0d49e5f39d94e14561919557a4df42fe35e994d6768e912519db1b6ec1 |
关闭
django_migrate_or_rollback-0.0.2-py3-none-any.whl 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 92c57877c5c32adc6124c342cd118e23c2fe483fe6416b287cb91ed583b9baf6 |
|
| MD5 | 1bb0dbf54f8dfd14e08186fad03d7375 |
|
| BLAKE2b-256 | 3001498c86c65022d7926b9cd494b84fcba7c87d7221c0dfe218ace903ebbba7 |