Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 想要创建一个视图,可以将mysql数据库转储为sql文件吗_Python_Mysql_Database_Django_Mysqldump - Fatal编程技术网

Python 想要创建一个视图,可以将mysql数据库转储为sql文件吗

Python 想要创建一个视图,可以将mysql数据库转储为sql文件吗,python,mysql,database,django,mysqldump,Python,Mysql,Database,Django,Mysqldump,我好像有点问题。我想编写一些代码,当管理员用户单击按钮时,可以转储mysql数据库。我尝试在下面的views.py中编写一些代码 视图.py @login_required def dbbackup(request): if not (request.user.is_authenticated() and request.user.is_staff): raise http.Http404 os.chdir('/usr/lo

我好像有点问题。我想编写一些代码,当管理员用户单击按钮时,可以转储mysql数据库。我尝试在下面的views.py中编写一些代码

视图.py

    @login_required
    def dbbackup(request):
        if not (request.user.is_authenticated() and request.user.is_staff):
            raise http.Http404
        os.chdir('/usr/local/src/djcode/c2duo_mms')  # This is important as apache by default goes to the user's home directory.
        os.popen3("mysqldump --add-drop-table -u " + settings.DATABASE_USER + " -p" + settings.DATABASE_PASSWORD + " " + settings.DATABASE_NAME + " >  backup.sql")
        os.popen3("gzip -c backup.sql > backup.gz")
现在给我一个错误
视图c2duo_mms.mmc.views.dbbackup没有返回HttpResponse对象。
如果我在末尾添加return HttpResponse。它会说
unbound method has_header()必须以HttpResponse实例作为第一个参数调用(改为got str instance)


我不太确定问题出在哪里。但我无法找到解决办法。我现在有点卡住了

您需要从方法末尾返回一个有效的
HttpResponse
对象。例如,如果要返回gzip文件:

@login_required
def dbbackup(request):
    if not (request.user.is_authenticated() and request.user.is_staff):
        raise http.Http404
    os.chdir('/usr/local/src/djcode/c2duo_mms')  # This is important as apache by default goes to the user's home directory.
    os.popen3("mysqldump --add-drop-table -u " + settings.DATABASE_USER + " -p" + settings.DATABASE_PASSWORD + " " + settings.DATABASE_NAME + " >  backup.sql")
    os.popen3("gzip -c backup.sql > backup.gz")
    dataf = open('/usr/local/src/djcode/c2duo_mms/backup.gz', 'r')
    return HttpResponse(dataf.read(), mimetype='application/x-gzip')

这将启动gzip文件的下载

您是如何在末尾添加
HttpResponse
的?@eam74:正如我所说的,如果我这样做,我得到
unbound方法has_header()必须以HttpResponse实例作为第一个参数调用(改为得到str实例)
。我只是在末尾添加
return HttpResponse
。差不多就是这样。@Shehzad009
返回HttpResponse(“”)
应该可以工作,但我认为最好在某个地方返回重定向,例如。g
return-HttpResponseRedirect('/')
@DrTyrsa
return-HttpResponse('')
返回空白页。此外,使用
返回HttpResponseRedirect('/')
也不起作用。(不转储数据)我似乎得到了这个错误
没有这样的文件或目录:'/usr/local/src/djcode/c2duo_mms/backup.gz
那么你可能应该弄清楚为什么代码运行后该文件不存在?