【问题标题】:Why doesn't django dumpdata include the django_migrations table?为什么 django dumpdata 不包含 django_migrations 表?
【发布时间】:2015-08-18 11:54:39
【问题描述】:

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 中在运行迁移之前检查迁移是否有错误,但看起来还没有完成:code.djangoproject.com/ticket/23347
  • 如果您希望创建数据库的备份,有比dumpdata 更好的方法来做到这一点。确切的方法将取决于您的数据库。 django_migrations 表存在于传统的 Django 机器之外,这可能是它没有被包括在内的原因。
  • @knbk 你能告诉我备份数据库的更好方法吗?另外,如果你想把它变成一个答案,我想标记它。谢谢,
  • @MMatt 搜索“备份”。如果不知道您使用的是哪个数据库后端,我真的不能说更多。

标签: django django-migrations


【解决方案1】:

django_migrations 表存在于传统的 Django 机器之外,这可能是它没有被包括在内的原因(根据@knbk)。

只要备份应用,就不需要备份迁移表。您可以删除所有应用表并重新迁移所有内容。当您使用它时,此时您可能还希望通过使用 squash 命令或删除所有迁移并从头开始创建来压缩您的迁移。

【讨论】:

    【解决方案2】:

    提醒其他人,django_migrations 不是唯一被排除的表,django_site 也被排除在外(仅适用于使用 Django 的站点功能时)。

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

    这些表很奇怪:

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

    由转储数据和migrate 创建。这意味着如果您转储数据,请准备好先截断上述表格,然后才能成功加载数据(或从您的转储数据命令中排除它们)。

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 2020-07-26
      • 1970-01-01
      • 2016-08-22
      • 2012-05-23
      • 2022-10-03
      • 2014-08-17
      • 1970-01-01
      • 2020-12-12
      相关资源
      最近更新 更多