python - 想要创建一个可以将 mysql 数据库转储为 sql 文件的 View

标签 python mysql database django mysqldump

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

Views.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")

现在给我一个错误 The view c2duo_mms.mmc.views.dbbackup didn't return an HttpResponse object. 如果我在末尾添加 return HttpResponse。它会说 unbound method has_header() must be called with HttpResponse instance as first argument (got str instance instead)

我不太确定是什么问题。但我无法找到解决方案。我现在有点卡住了。

最佳答案

您需要在方法的末尾返回一个有效的 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 文件的下载。

关于python - 想要创建一个可以将 mysql 数据库转储为 sql 文件的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6912695/

相关文章:

mysql - 我想从我的 CSV 文件 (MySQL 8.0) 加载特定的列数据

mysql - 使用 '--skip-slave-start' 启动 mysql 复制服务器

python - SQLAlchemy:如何遍历子查询中的bindparam值?

python - 在 Matplotlib 绘图中将轴的范围更改为非连续数字

php - 如何使用 php 脚本截断 mysql 表

java - 如何找到与另一个表中的时间戳最接近的表中的时间戳(MySQL)

mysql - 嵌套循环在 Mysql 中不起作用

mysql - 没有公共(public)字段的 SQL 连接表

python - 解决这个矩阵难题的更有效的解决方案?

python - 在 Streamlit 的复选框中选择多个选项