跳转到主要内容

尝试Django迁移并在失败时回滚的管理命令

项目描述

django-migrate-or-rollback

虽然Django的单个迁移是原子的(只要它们有默认的 atomic=True),但是一组迁移不是。因此,在运行迁移时,你可能会遇到部分失败的情况,即某些迁移成功而其他迁移失败。这个库可以解决这个问题。

这个库提供了一个新的管理命令 migrate_or_rollback。它是Django内置管理命令 migrate 的直接替代品。以下是它是如何工作的:

  1. 检查您的数据库和当前的迁移文件,以确定每个Django应用程序运行的最新迁移。
  2. 正常运行迁移。
  3. 如果迁移失败,则回滚到步骤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_rollbackmigrate 有相同的所有选项,例如 --noinput 标志。

警告

这个库假设您的迁移是可以逆回滚的。并非所有迁移都可以逆回滚。此外,回滚迁移只会逆转架构,而不会回滚数据库内容。

特别是

  • 已删除的数据(例如删除列或表)通过回滚删除迁移不会恢复。为了避免这种情况,你应该在一个部署中使字段可空,在下一个部署中删除它们。
  • 缺少 reverse 函数的 RunPython 语句在回滚时会出错。至少,添加 migrations.RunPython.noop 作为反向函数。此外,RunPython 反向函数可以用于在迁移回滚时回滚数据库内容的变化。
  • 删除不可空字段的迁移在回滚时会出错。为了避免这种情况,在一个部署中使字段可空,在下一个部署中删除它。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-migrate-or-rollback-0.0.2.tar.gz (3.8 kB 查看散列)

上传时间

构建分布

django_migrate_or_rollback-0.0.2-py3-none-any.whl (4.5 kB 查看散列)

上传时间 Python 3

由以下支持