如何在django中创建db dumpfile

Par*_*ngh 19 python django django-models django-commands

我想在django中进行转储,而不管我使用的数据库,以后可以加载.命令'dumpdata'非常适用于此,但它是在控制台上打印输出.更多我使用call_command函数调用它,所以我无法将其内容存储在任何变量中,因为它是在控制台上打印输出.

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

谢谢

Tad*_*eck 27

你只需使用它:

./manage.py dumpdata > data_dump.json
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • @ParitoshSingh使用>重定向可在Unix(以及OS X)和Windows中使用;您还将在其他平台上运行此平台吗? (2认同)

bou*_*leu 23

如果你在Python中使用它调用它,你可以选择一个文件来输入dumpdata的输出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()
Run Code Online (Sandbox Code Playgroud)

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

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

  • 很棒的答案!但缩进= 3 ?? 你正在打破我的4空间标签蟒蛇心脏. (13认同)

Evh*_*vhz 8

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

以下命令通常有效:

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

python manage.py loaddata db.json
Run Code Online (Sandbox Code Playgroud)

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

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

python manage.py loaddata auth.json
Run Code Online (Sandbox Code Playgroud)