我有一个使用 Postgres 数据库的 Django 应用程序。我需要能够备份和恢复数据库,既确保没有数据丢失,又能够在测试期间将数据从生产服务器复制到开发服务器。
似乎有几种不同的方法可以做到这一点:
只需直接与数据库交互即可。因此,对于 Postgres,我可能会使用以下命令编写脚本pg_dumpall
and psql
.
Use the sqlclear
/sqlall
Django 自带的命令。
Use the dumpdata
/loaddata
Django 自带的命令。因此,从要备份的数据库创建新的固定装置,然后将它们加载到要恢复的数据库中。
使用 Django 插件,例如Django 数据库备份 https://pypi.python.org/pypi/django-dbbackup.
我真的不明白这些不同技术的优缺点。
我突然想到:选项 1 是特定于数据库的,而选项 3 似乎更适合设置初始数据。但我仍然不确定选项 4 相对于选项 2 有什么优势。
选项 1-3 的问题是媒体文件(通过FileField https://docs.djangoproject.com/en/1.9/ref/models/fields/#filefield) are 不包含在备份中。可以单独备份包含媒体文件的目录。然而,因为当文件不再被引用时 Django 不会删除它们FileField
,您将不可避免地在备份中得到不需要的文件。
That's why I would go with option #4. In particular, I recommend django-archive http://django-archive.readthedocs.org/*. Some of its features include:
转储所有重要模型的内容(默认情况下ContentType
, Permission
, and Session
被排除在外,因为它们的填充者是manage.py migrate
)并让您选择要排除的其他模型。
包括引用的媒体文件FileField
and ImageField
字段。注意only包括数据库中行引用的文件;删除行留下的文件将被忽略。
生成包含数据库备份和媒体文件的单个存档。
提供用于自定义存档存储位置、文件名格式和存档类型的选项(gz
and bz2
).
安装就像添加一样简单django_archive
to INSTALLED_APPS
并设置选项settings.py
如果需要的话。安装后,您可以通过运行以下命令立即创建整个数据库(包括媒体文件)的存档:
./manage.py archive
* Disclaimer: I am the author of the package
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)