24

无论我使用什么数据库,我都想在 django 中进行转储,并且可以稍后加载。命令 'dumpdata' 非常适合此操作,但它会在控制台上打印输出。此外,我使用 call_command 函数调用它,因此我无法将其内容存储在任何变量中,因为它正在控制台上打印输出。

请让我知道如何使用 dumpdata 或任何其他命令或 api 将转储存储到文件中。

谢谢

4

5 回答 5

38

你只是这样使用它:

./manage.py dumpdata > data_dump.json

data_dump.json在该操作之后,您执行该命令的目录中将有文件。

有多种选择,但你可能已经知道了。您需要知道的是如何将标准输出的输出重定向到某个文件中>:您可以通过在文件名之前放置来执行该操作。

要将某些内容附加到您将使用的文件中>>,但是由于您正在从 Django 转储数据并且输出很可能是 JSON,因此您不会想要这样(因为它会使 JSON 无效)。

于 2012-07-18T16:39:44.937 回答
29

如果您使用 Python 从 Python 中调用它,您可以选择一个文件来将转储数据的输出放入其中call_command,例如:

from django.core.management import call_command

output = open(output_filename,'w') # Point stdout at a file for dumping data to.
call_command('dumpdata','model_name',format='json',indent=3,stdout=output)
output.close()

但是,如果您尝试从命令行调用它,例如--stdout=filename.json在您的 dumpdata 命令末尾,它会给出错误manage.py: error: no such option: --stdout

所以它就在那里,你只需要在 Python 脚本中而不是在命令行中调用它。如果您希望它作为命令行选项,那么重定向(正如其他人所建议的)是您最好的选择。

于 2012-07-18T17:20:06.403 回答
9

正如文档中提到的,为了转储大型数据集,您可以避免导致问题的部分,并将它们分开处理。

以下命令通常有效:

python manage.py dumpdata --exclude auth.permission --exclude contenttypes > db.json

python manage.py loaddata db.json

如果您可以稍后导出排除的数据:

python manage.py dumpdata auth.permission > auth.json

python manage.py loaddata auth.json
于 2016-09-13T22:12:02.410 回答
4

django-admin.py 转储数据

将数据库中与指定应用程序关联的所有数据输出到标准输出。

如您所知,您可以将标准输出重定向到文件:

command > file.data
于 2012-07-18T16:39:37.583 回答
0

您可以使用以下代码转储所有数据库模型数据

from django.core.management import call_command


with open("data.json", "w", encoding="utf-8") as fp:
    call_command("dumpdata", format="json", indent=2, stdout=fp)

data.json这将在项目文件夹的根目录中创建一个文件 ( )。

于 2021-07-25T23:35:55.990 回答