Django Orm 导出MySQL数据库数据到Excel


Django MySQL数据导出excel

前情提要

* 本章将使用 
django 1.11.11 版本
MySQL  5.7 版本
xlrd   1.2.0 版本
xlwt   1.3.0 版本

安装上述依赖

* 安装方式 
* pip 镜像源 https://pypi.douban.com/simple/
pip install django==1.11.11 -i https://pypi.douban.com/simple/
pip install pymysql -i https://pypi.douban.com/simple/
pip install xlrd -i https://pypi.douban.com/simple/
pip install xlwt -i https://pypi.douban.com/simple/

前端js + html

  1. 引入js文件 jq文件
<!-- 引入外部 网络上的js -->
<script
    src="https://code.jquery.com/jquery-3.3.1.min.js"
    integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
    crossorigin="anonymous">
</script>
  1. js函数
$("#export_excel").click(function () {
        var csrf = $('input[name="csrfmiddlewaretoken"]').val();
        const req = new XMLHttpRequest();
        req.open('POST', '/url/your url/', true);
        req.responseType = 'blob';
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //设置请求头
        req.send('f_name=' + $('#f_name').val() + "&&csrfmiddlewaretoken=" + csrf); //保存的文件名称
        req.onload = function () {
            const data = req.response;
            const a = document.createElement('a');
            const blob = new Blob([data]);
            const blobUrl = window.URL.createObjectURL(blob);
            download(blobUrl);
        };

    });

    function download(blobUrl) {
        var f_name = $("input[name='f_name']").val();
        const a = document.createElement('a');
        a.style.display = 'none';
        a.download = f_name + ".xls";
        a.href = blobUrl;
        a.click();
        document.body.removeChild(a);
    }
  1. html 导出按钮
<button id="export_excel" type="button" class="layui-btn">导出excel</button>

后端 Django views视图函数

  1. urls.py 新增导出excel的路由
url(r'^url/your_url/$', export_excel, name='export_excel'),  # 导出excel
  1. views.py 导出excel的代码
def export_excel(request):
    f_name = request.POST.get('f_name')
    response = HttpResponse(content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment;filename=' + f_name + '.xls'
    """导出excel表"""
    wb = xlwt.Workbook(encoding='utf-8')  # Create job table
    ws = wb.add_sheet('Menu', cell_overwrite_ok=True)  # Create WorkSheet
    row_num = 0
    font_style = xlwt.XFStyle()
    font_style.font.bold = True  # Binary
    columns = ['微信名称', '姓名']  # Header if you add an expoeted columns
    for col_num in range(len(columns)):  # write Header content
        ws.write(row_num, col_num, columns[col_num], font_style)
    # Sheet body, remaining rows
    font_style = xlwt.XFStyle()
    # DB Data
    rows = User.objects.all().values_list('usernickname', 'uu_name')
    for row in rows:
        row_num += 1
        # Write line by line in Excel
        for col_num in range(len(row)):
            ws.write(row_num, col_num, row[col_num], font_style)
    wb.save(response)
    return response

response: 就是数据 返回到前端后 导出后缀为 .xls 的文件


文章作者: 柒仔
文章链接: /article/19/
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 XiaoLiu!
侵权声明: 若无意对您的文章造成侵权,请您留言,博主看到后会及时处理,谢谢。
评论-----昵称和邮箱必填,网址选填
  目录