Dou*_*ris 27 django django-migrations
在Django的迁移代码中,有一个squashmigrations命令:" 如果可能的话,将迁移压缩到更少的迁移,app_label包括migration_name更少的迁移."
所以,如果你想压缩前五次迁移,这将有所帮助.
从一个特定的壁球开始压制的最佳方法是migration_name什么?
在我目前正在开展的项目中,我们添加了5-10个新的迁移文件,因为我们添加了新功能.我们将立即部署整个项目,看起来单独运行这些将花费太长时间.我想将此项目的所有迁移压缩为单个迁移并测试运行时间.
A--*_*--- 52
python manage.py squashmigrations <appname> <squashfrom> <squashto>
python manage.py help squashmigrations
Run Code Online (Sandbox Code Playgroud)
https://docs.djangoproject.com/en/dev/topics/migrations/#migration-squashing
这将使您能够更精细地控制哪些迁移进行压缩,并让您保持更清晰的提交历史记录.删除+重新创建所有迁移可能会导致其他问题,例如循环依赖性,具体取决于模型的构造方式.
Squash 迁移命令在 Django 1.9 中引入
如果您使用的是Django 1.8,您需要
squashmigrations.py从Django 1.9版本
获取https://github.com/django/django/blob/stable/1.9.x/django/core/management/commands/squashmigrations.py/-package-/-app-/management/commands/squashmigrations19.py./manage.py squashmigrations19 -app- 0002 0003我创建了django-squash https://pypi.org/project/django-squash/作为一种不必处理每个应用程序级别的迁移或更糟糕的每个应用程序特定迁移级别的方法,并在每个应用程序级别上处理它-项目级别。我们的想法是希望在某个时候将其集成到 Django 核心中。
基本思想:
例子:
/app1/migrations/__init__.py
/app1/migrations/0001_initial.py
/app1/migrations/0002_created_user_model.py
/app1/migrations/0003_added_username.py
/app1/migrations/0004_added_password.py
/app1/migrations/0005_last_name.py
Run Code Online (Sandbox Code Playgroud)
你已经全部应用了。
但每次运行测试时,这些步骤中的每一个都需要运行,从而占用宝贵的时间。所以我们压扁。新目录将如下所示:
/app1/migrations/__init__.py
/app1/migrations/0001_initial.py
/app1/migrations/0002_created_user_model.py
/app1/migrations/0003_added_username.py
/app1/migrations/0004_added_password.py
/app1/migrations/0005_last_name.py
/app1/migrations/0006_squash.py
Run Code Online (Sandbox Code Playgroud)
在里面0006_squash.py你会发现一个replaces = [..]带有迁移名称 1-5 的文件。Migration.operations = [..]如果您删除了所有迁移并执行了./manage.py makemigrations+ any RunSQL/ RunPythonwith ,您还会发现 a包含您所期望的一切elidable=False。如果您部署到缺少任何迁移 1-5 的环境,它将从源应用它,并且根本不使用 0006。(这是标准的 Django 迁移)
一段时间过去了,现在您的迁移看起来像这样:
/app1/migrations/__init__.py
/app1/migrations/0001_initial.py
/app1/migrations/0002_created_user_model.py
/app1/migrations/0003_added_username.py
/app1/migrations/0004_added_password.py
/app1/migrations/0005_last_name.py
/app1/migrations/0006_squash.py
/app1/migrations/0007_change_username_to_100_char.py
/app1/migrations/0008_added_dob.py
Run Code Online (Sandbox Code Playgroud)
你又压扁了。这次将会发生以下情况。里面的任何内容都replaces = [..]将被删除。0006_squash.py将被修改为replaces空列表。最后,南瓜将通过新的更改重新创建。总而言之,看起来像这样:
/app1/migrations/0006_squash.py
/app1/migrations/0007_change_username_to_100_char.py
/app1/migrations/0008_added_dob.py
/app1/migrations/0009_squash.py
Run Code Online (Sandbox Code Playgroud)
再次开始循环。
| 归档时间: |
|
| 查看次数: |
17967 次 |
| 最近记录: |