无论我使用什么数据库,我都想在 django 中进行转储,并且可以稍后加载。命令 'dumpdata' 非常适合此操作,但它会在控制台上打印输出。此外,我使用 call_command 函数调用它,因此我无法将其内容存储在任何变量中,因为它正在控制台上打印输出。
请让我知道如何使用 dumpdata 或任何其他命令或 api 将转储存储到文件中。
谢谢
无论我使用什么数据库,我都想在 django 中进行转储,并且可以稍后加载。命令 'dumpdata' 非常适合此操作,但它会在控制台上打印输出。此外,我使用 call_command 函数调用它,因此我无法将其内容存储在任何变量中,因为它正在控制台上打印输出。
请让我知道如何使用 dumpdata 或任何其他命令或 api 将转储存储到文件中。
谢谢
你只是这样使用它:
./manage.py dumpdata > data_dump.json
data_dump.json
在该操作之后,您执行该命令的目录中将有文件。
有多种选择,但你可能已经知道了。您需要知道的是如何将标准输出的输出重定向到某个文件中>
:您可以通过在文件名之前放置来执行该操作。
要将某些内容附加到您将使用的文件中>>
,但是由于您正在从 Django 转储数据并且输出很可能是 JSON,因此您不会想要这样(因为它会使 JSON 无效)。
如果您使用 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 脚本中而不是在命令行中调用它。如果您希望它作为命令行选项,那么重定向(正如其他人所建议的)是您最好的选择。
正如文档中提到的,为了转储大型数据集,您可以避免导致问题的部分,并将它们分开处理。
以下命令通常有效:
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
您可以使用以下代码转储所有数据库模型数据
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
这将在项目文件夹的根目录中创建一个文件 ( )。