dav*_*ang 33 django django-migrations
如何在Django 1.8+上重新运行数据迁移?如果相关,我的迁移编号为0011_my_data_migration.py,是最新的迁移.
Ala*_*air 77
在要重新运行的迁移之前假回迁.
./manage.py migrate --fake yourapp 0010_my_previous_data_migration
Run Code Online (Sandbox Code Playgroud)
然后重新运行迁移.
./manage.py migrate yourapp 0011_my_data_migration
Run Code Online (Sandbox Code Playgroud)
然后,您可以伪造回已运行的最新迁移.在你的情况下,你说0011是最新的,所以你可以跳过这个阶段.
./manage.py migrate --fake yourapp 0014_my_latest_data_migration
Run Code Online (Sandbox Code Playgroud)
请注意,根据数据库的状态和迁移的内容,重新运行此类迁移可能会导致错误.请注意有关该选项的文档中的警告--fake:
这适用于高级用户在手动应用更改时直接操作当前迁移状态; 请注意,使用
--fake运行会导致将迁移状态表置于需要手动恢复以使迁移正确运行的状态.
Alasdair的回答给出了关于此的免责声明,但是如果您的迁移是幂等的,那么伪造迁移回到前一个迁移只是安全的,这意味着您可以多次运行它而不会出现重复数据等副作用.大多数人不这样写他们的迁移,但这是一个很好的做法.
您有两个选项可以使此过程安全:
Model.objects.get_or_create()方法一样)或删除并重新创建.重用是更好的选择,因为删除和重新创建将更改数据库索引和序列.migrations.RunPython().例如,如果有migrations.RunPython(add_countries),您可以将其更改migrations.RunPython(add_countries, remove_countries)为第二个函数中的任何相关国家/地区.如果您选择选项#2,那么您将运行:
./manage.py migrate yourapp 0010_my_previous_data_migration
./manage.py migrate yourapp 0011_my_data_migration
Run Code Online (Sandbox Code Playgroud)
如果你想制作一个衬垫,那么你可以一遍又一遍地使用它:
./manage.py migrate yourapp 0010_my_previous_data_migration && ./manage.py migrate yourapp 0011_my_data_migration
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15345 次 |
| 最近记录: |