1. 程式人生 > >flask使用pymysql連線MySQL,生成xls檔案並下載到本地

flask使用pymysql連線MySQL,生成xls檔案並下載到本地

flask框架連線MySQL,我們使用pymsql這個工具,如下操作:

from flask import Flask
import pymysql
import xlwt
from io import BytesIO
from flask import make_response


db = 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])
for i in ret: # 迴圈每一列 for j in range(4): # 在每列新增資料 ws.write(k, j, i[j]) 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()