我正在为Django应用程序进行数据迁移以进行填充 数据库中的主表将构成数据库的主体 应用程序 - 这是可能添加到的持久/永久数据 永远不会删除。
我的参考资料是Django 1.7文档,尤其是 页面上的示例
使用名为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
相对应的方法是什么?
提前感谢您的帮助。
答案 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()函数。