来自https://docs.djangoproject.com/en/1.10/topics/migrations/#data-migrations
的示例编写数据迁移并将其迁移到编写修改必要数据的简单函数后,有什么好处?
PostBlog blogPoster = new PostBlog();
try {
blogPoster.execute(insertBlogURL);
} catch (InterruptedException e) {} catch (ExecutionException e) {}
在这个例子中,我们可以运行下面的代码并运行它。
def combine_names(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model("yourappname", "Person")
for person in Person.objects.all():
person.name = "%s %s" % (person.first_name, person.last_name)
person.save()
class Migration(migrations.Migration):
initial = True
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(combine_names),
]
答案 0 :(得分:2)
this.userSettingsObservable.onNext(settings)
解决的问题是能够在历史上下文中运行代码,并利用您的历史模型和以前的架构编辑知识。
如果你的迁移,我们会说你在中间遇到错误。现在你有一些迁移的数据和其他没有的数据,而且你手上的问题要大得多。这可能是最大的原因。
请参阅RunPython文档。它还可以帮助您执行其他操作,例如反向迁移和提供迁移提示。
答案 1 :(得分:1)
用于部署目的。很多时候,团队有使用自动化工具部署代码更改的标准流程,因此能够在生产中应用数据更改也需要自动化。您无法通过登录生产服务器来执行您所说的内容,加载shell并在每次发生时运行代码。它打破了部署过程并且容易出错,如果发生了不好的事情,你就不记得你做了什么。
但是,如果您的部署过程具有运行迁移的步骤,并且您只需将代码放在迁移文件中,则可以自动应用它,并且可以跟踪已应用的内容。它也是可测试的,以确保迁移本身没有错误。