Django中的数据迁移

时间:2015-03-05 08:17:43

标签: django django-models

我正在为Django应用程序进行数据迁移以进行填充 数据库中的主表将构成数据库的主体 应用程序 - 这是可能添加到的持久/永久数据 永远不会删除。

我的参考资料是Django 1.7文档,尤其是 页面上的示例

https://docs.djangoproject.com/en/1.7/ref/migration-operations/#django.db.migrations.operations.RunPython

使用名为forward_funcs的自定义方法:

def forwards_func(apps, schema_editor):

# We get the model from the versioned app registry;
# if we directly import it, it'll be the wrong version

Country = apps.get_model("myapp", "Country")
db_alias = schema_editor.connection.alias
Country.objects.using(db_alias).bulk_create([
Country(name="USA", code="us"),
Country(name="France", code="fr"),])

我假设bulk_create的参数是Country模型对象而不是namedtuple个对象的列表,尽管格式看起来完全相同。是这种情况,有人可以解释一下db_alias是什么吗?

另外,如果我希望使用数据迁移更改或删除表中的现有条目,那么与bulk_create相对应的方法是什么?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

国家与您from app.models import Country的情况相同。只有不同的东西,导入总是为您提供最新的模型,迁移中的apps.get_model会在迁移时为您提供模型。它会在初始迁移过程中继续编辑模型。

关于bulk_create;它的参数确实是一个未保存的Country对象列表,并使用它来对您的数据库进行大量插入。有关bulk_create的更多信息,请访问此处; https://docs.djangoproject.com/en/1.7/ref/models/querysets/#bulk-create

关于db_alias,它是您在设置中设置的数据库的名称。大多数情况下它是default,因此如果您只使用一个数据库,则可以将其保留在代码中。如果您在设置中设置了更多数据库,则该函数可能会多次调用。有关using的更多信息; https://docs.djangoproject.com/en/1.7/ref/models/querysets/#using

批量删除实际上非常简单,您只需过滤您的国家/地区并在查询集上调用删除。所以像;

Country.objects.filter(continent="Europe").delete()

关于持久性/永久性数据问题,我真的没有解决方案。我认为,你可以做的一件事是覆盖模型和管理器上的.delete()函数。