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