为什么Django的dumpdata命令不包括django_migrations表?

6

Django dumpdata(未指定应用程序)将所有已安装应用程序的所有表转储到输出文件中。我刚刚意识到这并不包括django_migrations表。我检查了其他django表,它们包含在内,因为它们在INSTALLED_APPS设置中指定如下:

'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

现在,我很好奇,为什么django_migrations表没有被转储。理由似乎是当你创建一个新的数据库并迁移时,它会自动生成并自动填充数据。这是正确的吗?如果是这样,我的第二个问题是是否有一种方法也可以将其转储备份?我对Django还很陌生,正在尝试新的东西,可能会破坏那个表格。有一个备份将是很方便的。


只有在提供初始数据固定装置(1.8之前)或数据迁移时,表格才会自动填充。曾经有一个功能请求要在Django中添加一个--dry-run选项,类似于South中的检查迁移错误的功能,在运行迁移之前进行检查,但看起来这个功能尚未完成:https://code.djangoproject.com/ticket/23347 - Brandon Taylor
1
如果您想创建数据库备份,有比“dumpdata”更好的方法。确切的方法取决于您的数据库。 “django_migrations”表位于常规Django机制之外,这可能是为什么它没有被包含在内的原因。 - knbk
@knbk,你能给我一些关于更好的数据库备份方式的提示吗?如果你愿意把这个变成一个答案,我会标记它。谢谢。 - mehmet
@MMatt 搜索“备份<你正在使用的数据库>”。如果不知道你使用的是哪个数据库后端,我真的无法再多说了。 - knbk
2个回答

2

提醒其他人,django_migrations 不是唯一被排除的表,django_site 也被排除了(只适用于使用 Django 网站功能的情况)。

这意味着,在迁移后恢复数据库时,请勿删除为这两个表创建的迁移数据。如果适用,您可能需要手动创建 django_site 条目。

奇怪的是这些表:

    'auth_group_permissions',
    'auth_permission',
    'auth_user',
    'django_content_type',

这些表是通过数据转储和 migrate 命令创建的。这意味着,如果你要进行数据转储,请先准备好清空上述表格,然后才能成功地加载数据(或在进行数据转储命令时排除它们)。


在我的项目中,网站是在dumpdata中的。但是contenttypes和permission的截断(只需要这两个?)非常有用,谢谢!--natural-foreign也总是很有帮助的,特别是如果你的数据模型很复杂。 - benzkji

1

django_migrations表位于传统的Django机制之外,这可能是为什么它没有被包含的原因(参见@knbk)。

只要备份了您的应用程序,就不需要备份迁移表。您可以删除所有应用程序表并重新迁移所有内容。在此过程中,您还可以使用squash命令将迁移压缩,或者通过删除所有迁移并从头开始创建来进行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接