我正在尝试使用call_command
方法调用dumpdata command
。我手动将其用于将数据保存到文件中。
python manage.py dumpdata appname_one appname_two > /path/to/save/file.json
并保存json文件。现在,我处于需要使用call_command
方法调用此命令的情况。
我可以使用以下命令从命令中打印出json:
from django.core.management import call_command
call_command('dumpdata', 'appname_one', 'appname_two')
有没有办法可以将命令行中的给定数据保存到文件中?
答案 0 :(得分:14)
必须将sys.stdout
重定向到文件才能实现上述目标。像。的东西。
import sys
from django.core.management import call_command
sysout = sys.stdout
sys.stdout = open('filename.json', 'w')
call_command('dumpdata', 'appname_one', 'appname_two')
sys.stdout = sysout
答案 1 :(得分:12)
更好的方法是使用Django的内置stdout重定向作为命令模块。见docs here。
如果要在将流发送到文件之前对其进行操作,还可以将其传递给StringIO缓冲区:
import os
from cStringIO import StringIO
from django.core import management
def create_fixture(app_name, filename):
buf = StringIO()
management.call_command('dumpdata', app_name, stdout=buf)
buf.seek(0)
with open(filename, 'w') as f:
f.write(buf.read())
答案 2 :(得分:2)
我正在使用Django fixture magic https://github.com/davedash/django-fixture-magic并需要转储自定义夹具。我尝试了几种方法,但最终使用了Amyth的答案,因为这是唯一有效的方法。
这是我的管理操作,适用于夹具魔法
def export_survey(modeladmin, request, queryset):
sysout = sys.stdout
survey = queryset[0]
fname = "%s.json" %(survey.slug)
response = HttpResponse(mimetype='application/json')
response['Content-Disposition'] = 'attachment; filename=%s' %(fname)
sys.stdout = response
call_command('custom_dump', 'complete_survey', survey.id)
sys.stdout = sysout
return response
export_survey.short_description = "Exports a single survey as a .json file"
答案 3 :(得分:0)
数据库夹具通常压缩良好,"C:/Users/xorex/Documents/Spirit-master/config/config5.xml";
可以读取压缩夹具。直接编写loaddata
压缩夹具:
.bz2
答案 4 :(得分:0)
此帮助将多个数据转储到json文件中
from django.core.management import call_command
import sys
sys.stdout = open('app_one/fixtures/apple.json', 'w')
call_command('dumpdata', 'app_one.apple')
sys.stdout = open('app_two/fixtures/banana.json', 'w')
call_command('dumpdata', 'app_two.banana')