如何创建Django数据库备份?

如何创建Django数据库备份?,django,Django,我在完全相同的模式上运行多个(或多或少)相同的Django(1.11)部署,但设置不同(我自己做设置模型)。这些设置模型中的值(其中有很多)对于每个部署都是不同的,因此这些站点可能会根据设置的不同而不同,例如 出现了一个业务需求,要求我定期从一个堆栈导出这些设置模型(显示设置,货币设置,等等),然后将它们导入另一个堆栈。我知道dumpdata和loaddata以JSON文件的形式提供基本功能,但我还需要业务方面的这些额外功能: 管理员必须能够选择要导出的设置,包括这些设置中可能存在的Foreig

我在完全相同的模式上运行多个(或多或少)相同的Django(1.11)部署,但设置不同(我自己做
设置
模型)。这些
设置
模型中的值(其中有很多)对于每个部署都是不同的,因此这些站点可能会根据设置的不同而不同,例如

出现了一个业务需求,要求我定期从一个堆栈导出这些
设置
模型(
显示设置
货币设置
,等等),然后将它们导入另一个堆栈。我知道
dumpdata
loaddata
以JSON文件的形式提供基本功能,但我还需要业务方面的这些额外功能:

  • 管理员必须能够选择要导出的设置,包括这些设置中可能存在的
    ForeignKey
    ManyToManyField
    关系
  • 导入该文件时,管理员必须能够选择导入文件中的哪些设置以及导入方式(更新现有设置模型或创建新设置模型)
  • 可以将同一导出文件重新导入到同一堆栈中,以创建这些设置的副本
  • 以下是我迄今为止尝试过的解决方案:

  • dumpdata
    /
    loaddata
    :不需要“选择要导入/导出的设置”要求
  • django导入导出
    :仅支持导出表格结构,即外键不能作为设置记录的一部分导出
  • django easydump
    :将转储上传到s3的完全无关的包。可以指定要包括的模型,但不能指定每个模型中要包括的属性
  • djangorestframework
    中编写自定义嵌套的
    ModelSerializer
    s:可行但繁琐。需要定制前端来处理第一个需求

  • 我的问题是:是否已经有了一种内置的方法来执行所述的导入/导出,或者如果没有,是否有任何符合条件的第三方软件包(上面没有列出)是我明显遗漏的?

    没有内置的方法可以处理您的所有需求

    如果模式在所有部署中都相同,那么最简单的方法就是为每个模型设置drf端点。除非我遗漏了什么,否则它们不需要嵌套

    def import_currency_settings(new=False, remove_fields=[]):
        endpoint = default_domain + '/currency_settings/'
        settings = requests.get(endpoint, auth=(api_user, api_pass)).json()
        for setting in settings:
            for field in remove_fields:
                setting.pop(field, None)
            if new:
                CurrencySettings.objects.create(**setting)
            else:
                updated = setting
                updated.pop('id', None)
                CurrencySettings.update_or_create(
                    id=setting['id'],
                    fields=updated
                )
    
    import_currency_settings(new=True, remove_fields=['vat'])
    

    这无疑是我“可行但繁琐”的DRF实现背后的基本思想,在您的示例中,
    CurrencySettings
    将包含数百个FK和M2M,这是DRF可以处理的。令人厌烦的是,有2000个这样的对象,我还不知道如何在它们的外键(多个级别,有时是循环的)也准备好之前创建对象来解决这个问题。