博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask使用pymysql连接MySQL,生成xls文件并下载到本地
阅读量:6819 次
发布时间:2019-06-26

本文共 2921 字,大约阅读时间需要 9 分钟。

版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面。

flask框架连接MySQL,我们使用pymsql这个工具,如下操作:

from flask import Flaskimport pymysqlimport xlwtfrom io import BytesIOfrom flask import make_responsedb = pymysql.connect(host='127.0.0.1',port=3306,user='user', passwd='pwd', db='db_name', charset='utf8')  # 创建链接def data_db():  # 去数据库取数据,假设数据库表只有4个字段    sql = """          select * from table_name;          """    cc = db.cursor()  # 其实就是用来获得python执行Mysql命令的方法,也就是 我们所说的操作游标    cc.execute(sql)  # 真正执行sql语句    cn = cc.fetchall()  # 接收全部的返回结果行row    return cn  # 返回app = Flask(__name__) @app.route('/index_up')  # 设置路由def index_list():  # 执行视图函数    ret = data_db()  # 获取数据    wb = xlwt.Workbook(encoding='utf-8')  # 实例化,有encoding和style_compression参数    ws = wb.add_sheet("111", cell_overwrite_ok=True)  # Workbook的方法,生成名为111.xls文件    row0 = ['字段1', '字段2', '字段3', '字段4']  # 指定xls文件的字段    for i in range(0, len(row0)):  # 将这些字段写入111.xls文件        ws.write(0, i, row0[i])    k = 1    for i in ret:  # 循环每一列        for j in range(4):  # 在每列添加数据            ws.write(k, j, i[j])         k += 1    sio = BytesIO()  # 将获取的数据在内存中写,有时会用到StringIO()    wb.save(sio)  # 将文件流保存    sio.seek(0)  # 光标    response = make_response(sio.getvalue())  #     response.headers['Content-type'] = 'application/vnd.ms-excel'  # 指定返回的类型    response.headers['Transfer-Encoding'] = 'chunked'    response.headers['Content-Disposition'] = 'attachment;filename=111.xls'  # 设定用户浏览器显示的保存文件名    return response  # 返回response,浏览器会出现如下效果,如果返回其他,比如None就会只下载不在浏览器提示。 if __name__ == '__main__':    app.run()

 

 版本二:将MySQL的数据写入到excel中并下载到指定路径里面

from flask import Flaskimport pymysqlimport xlwtfrom io import BytesIOfrom flask import make_responsedb = pymysql.connect(host='127.0.0.1',port=3306,user='user', passwd='pwd', db='db_name', charset='utf8')  # 创建链接def data_db():  # 去数据库取数据,假设数据库表只有4个字段    sql = """          select * from table_name;          """    cc = db.cursor()  # 其实就是用来获得python执行Mysql命令的方法,也就是我们所说的操作游标    cc.execute(sql)  # 真正执行sql语句    cn = cc.fetchall()  # 接收全部的返回结果行row    return cn  # 返回app = Flask(__name__) @app.route('/index_up')  # 设置路由def index_list():  # 执行视图函数    ret = data_db()  # 获取数据    wb = xlwt.Workbook(encoding='utf-8')  # 实例化,有encoding和style_compression参数    ws = wb.add_sheet("111", cell_overwrite_ok=True)  # Workbook的方法,生成名为111.xls文件    row0 = ['字段1', '字段2', '字段3', '字段4']  # 指定xls文件的字段    for i in range(0, len(row0)):  # 将这些字段写入111.xls文件        ws.write(0, i, row0[i])    k = 1    for i in ret:  # 循环每一列        for j in range(4):  # 在每列添加数据            ws.write(k, j, i[j])        k += 1    today = str(datetime.datetime.now())    file_name = "day_data" + today[0:13] + ".xls"    fp = r"E:/我的资料/inner_ctrl01/ttt"    wb.save(file_name)    shutil.move(file_name, os.path.join(fp, file_name))    return 'ok'  # 必须return,并且不能return 空 if __name__ == '__main__':    app.run()

 

转载于:https://www.cnblogs.com/aaronthon/p/10245894.html

你可能感兴趣的文章
[翻译svg教程]svg中的circle元素
查看>>
[转]Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务
查看>>
linux内核段属性机制【转】
查看>>
eclipse设置系统字体
查看>>
seq命令
查看>>
微信小程序录音实现
查看>>
remove namespace from xml config file
查看>>
<转>从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程
查看>>
excel 获取中文拼音首字母
查看>>
Eclipse 使用maven创建Dynamic Web Project
查看>>
Python学习笔记——迭代器(RandSeq和AnyIter)
查看>>
MySQL索引使用方法和性能优化
查看>>
JSP简单练习-定时刷新页面
查看>>
JSON.parse()与JSON.stringify()的区别
查看>>
[Python] Boolean Or "Mask" Index Arrays filter with numpy
查看>>
有了#ifdef 为什么还需要#if defined
查看>>
eclipse中.properties文件不能输入中文的解决办法
查看>>
[Unit Testing] Mock a Node module's dependencies using Proxyquire
查看>>
C++中malloc/free和new/delete 的使用
查看>>
ASP.NET MVC读取XML并使用ViewData显示
查看>>