尝试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 |