日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python查詢MySQL將數據寫入Excel

瀏覽:30日期:2022-07-06 17:44:11

一、概述

現有一個用戶表,需要將表數據寫入到excel中。

環境說明

mysql版本:5.7

端口:3306

數據庫:test

表名:users

表結構如下:

CREATE TABLE `users` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT ’用戶名’, `password` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT ’密碼’, `phone` varchar(20) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT ’手機號’, `email` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT ’郵箱’, `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT ’創建時間’, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

插入3行數據

INSERT INTO `test`.`users` (`id`, `username`, `password`, `phone`, `email`, `create_time`) VALUES (’1’, ’xiao’, ’123’, ’12345678910’, ’123@qq.com’, ’2020-04-10 01:22:07’);INSERT INTO `test`.`users` (`id`, `username`, `password`, `phone`, `email`, `create_time`) VALUES (’2’, ’zhang’, ’123’, ’12345678910’, ’123@qq.com’, ’2020-04-10 01:22:07’);INSERT INTO `test`.`users` (`id`, `username`, `password`, `phone`, `email`, `create_time`) VALUES (’3’, ’lisi’, ’123’, ’12345678910’, ’123@qq.com’, ’2020-04-10 01:22:07’);

二、基本寫法

安裝模塊

pip3 install xlwt pymysql

test_excel.py

#!/usr/bin/env python3# coding: utf-8import osimport xlwtimport pymysqlimport datetimeclass MysqlToExcel(object): def __init__(self): self.host = ’10.212.21.92’ self.user = ’root’ self.passwd = ’abcd1234’ self.db_name = ’test’ self.port = 3306 self.file_name = ’data.xls’ def get_query_results(self): sql = 'select * from test.users' conn = pymysql.connect( host=self.host, user=self.user, passwd=self.passwd, port=self.port, database=self.db_name, charset=’utf8’, cursorclass=pymysql.cursors.DictCursor ) cur = conn.cursor() # 創建游標 cur.execute(sql) # 執行sql命令 result = cur.fetchall() # 獲取執行的返回結果 # print(result) cur.close() conn.close() # 關閉mysql 連接 return result def generate_table(self): ''' 生成excel表格 :return: ''' # 刪除已存在的文件 if os.path.exists(self.file_name): os.remove(self.file_name) result = self.get_query_results() # print(result) if not result: print('查詢結果為空') return False # 創建excel對象 f = xlwt.Workbook() sheet1 = f.add_sheet(’Sheet1’, cell_overwrite_ok=True) # 列字段 column_names = [’id’,’username’,’password’,’phone’,’email’] # 寫第一行,也就是列所在的行 for i in range(0, len(column_names)): sheet1.write(0, i, column_names[i]) # 寫入多行 num = 0 # 計數器 for i in result: sheet1.write(num + 1, 0, i[’id’]) sheet1.write(num + 1, 1, i[’username’]) sheet1.write(num + 1, 2, i[’password’]) sheet1.write(num + 1, 3, i[’phone’]) sheet1.write(num + 1, 4, i[’email’]) # 日期轉換為字符串 value = i[’create_time’].strftime(’%Y-%m-%d %H:%M:%S’) sheet1.write(num + 1, 5, value) num += 1 # 自增1 # 保存文件 f.save(self.file_name) # 判斷文件是否存在 if not os.path.exists(self.file_name): print('生成excel失敗') return False print('生成excel成功') return Trueif __name__ == ’__main__’: MysqlToExcel().generate_table()

執行輸出:

查看excel表

python查詢MySQL將數據寫入Excel

三、高級寫法

在基礎寫法中,需要指定表的字段,比如:[’id’,’username’,’password’,’phone’,’email’]

如果一個表有70個字段怎么辦?一個寫筆記耗時間,能不能動態獲取表字段呢?答案是可以的。

由于我在創建游標時,指定了pymysql.cursors.DictCursor,它返回的每一行數據,都是一個字典。

因此,通過dict.keys()就可以獲取表字段了。

另外,我還得將查詢結構中非string的轉換為string類型。

test_excel.py

#!/usr/bin/env python3# coding: utf-8import osimport xlwtimport pymysqlimport datetimeclass MysqlToExcel(object): def __init__(self): self.host = ’10.212.21.92’ self.user = ’root’ self.passwd = ’abcd1234’ self.db_name = ’test’ self.port = 3306 self.file_name = ’data.xls’ def get_query_results(self): sql = 'select * from test.users' conn = pymysql.connect( host=self.host, user=self.user, passwd=self.passwd, port=self.port, database=self.db_name, charset=’utf8’, cursorclass=pymysql.cursors.DictCursor ) cur = conn.cursor() # 創建游標 cur.execute(sql) # 執行sql命令 result = cur.fetchall() # 獲取執行的返回結果 # print(result) cur.close() conn.close() # 關閉mysql 連接 return result def generate_table(self): ''' 生成excel表格 :return: ''' # 刪除已存在的文件 if os.path.exists(self.file_name): os.remove(self.file_name) result = self.get_query_results() # print(result) if not result: print('查詢結果為空') return False # 創建excel對象 f = xlwt.Workbook() sheet1 = f.add_sheet(’Sheet1’, cell_overwrite_ok=True) # 第一行結果 row0 = result[0] # 列字段 column_names = list(row0) # 寫第一行,也就是列所在的行 for i in range(0, len(row0)): sheet1.write(0, i, column_names[i]) # 寫入多行 # 行坐標,從第2行開始,也是1 for row_id in range(1, len(result) + 1): # 列坐標 for col_id in range(len(column_names)):# 寫入的值value = result[row_id - 1][column_names[col_id]]# 判斷為日期時if isinstance(value, datetime.datetime): value = result[row_id - 1][column_names[col_id]].strftime(’%Y-%m-%d %H:%M:%S’)# 寫入表格sheet1.write(row_id, col_id, value) # 保存文件 f.save(self.file_name) # 判斷文件是否存在 if not os.path.exists(self.file_name): print('生成excel失敗') return False print('生成excel成功') return Trueif __name__ == ’__main__’: MysqlToExcel().generate_table()

執行腳本,結果同上!

四、自適應寬度

上面表格看著不美觀,寬度沒有自適應。

解決方法:

增加一個方法,獲取寬度

def get_maxlength(self,value, col): ''' 獲取value最大占位長度,用于確定導出的xlsx文件的列寬 col : 表頭,也參與比較,解決有時候表頭過長的問題 ''' # 長度列表 len_list = [] # 表頭長度 width = 256 * (len(col) + 1) len_list.append(width) # 數據長度 if len(value) >= 10: width = 256 * (len(value) + 1) len_list.append(width) return max(len_list)

完整代碼如下:

#!/usr/bin/env python3# coding: utf-8import osimport xlwtimport pymysqlimport datetimeclass MysqlToExcel(object): def __init__(self): self.host = ’10.212.21.92’ self.user = ’root’ self.passwd = ’abcd1234’ self.db_name = ’test’ self.port = 3306 self.file_name = ’data.xls’ def get_query_results(self): sql = 'select * from test.users' conn = pymysql.connect( host=self.host, user=self.user, passwd=self.passwd, port=self.port, database=self.db_name, charset=’utf8’, cursorclass=pymysql.cursors.DictCursor ) cur = conn.cursor() # 創建游標 cur.execute(sql) # 執行sql命令 result = cur.fetchall() # 獲取執行的返回結果 # print(result) cur.close() conn.close() # 關閉mysql 連接 return result def get_maxlength(self,value, col): ''' 獲取value最大占位長度,用于確定導出的xlsx文件的列寬 col : 表頭,也參與比較,解決有時候表頭過長的問題 ''' # 長度列表 len_list = [] # 表頭長度 width = 256 * (len(col) + 1) len_list.append(width) # 數據長度 if len(value) >= 10: width = 256 * (len(value) + 1) len_list.append(width) return max(len_list) def generate_table(self): ''' 生成excel表格 :return: ''' # 刪除已存在的文件 if os.path.exists(self.file_name): os.remove(self.file_name) result = self.get_query_results() # print(result) if not result: print('查詢結果為空') return False # 創建excel對象 f = xlwt.Workbook() sheet1 = f.add_sheet(’Sheet1’, cell_overwrite_ok=True) # 第一行結果 row0 = result[0] # 列字段 column_names = list(row0) # 寫第一行,也就是列所在的行 for i in range(0, len(row0)): sheet1.write(0, i, column_names[i]) # 寫入多行 # 行坐標,從第2行開始,也是1 for row_id in range(1, len(result) + 1): # 列坐標 for col_id in range(len(column_names)):# 寫入的值value = result[row_id - 1][column_names[col_id]]# 判斷為日期時if isinstance(value, datetime.datetime): value = result[row_id - 1][column_names[col_id]].strftime(’%Y-%m-%d %H:%M:%S’)# 獲取表格對象col = sheet1.col(col_id)if value: if isinstance(value, int): value = str(value) # 獲取寬度 width = self.get_maxlength(value,column_names[col_id]) # 設置寬度 col.width = width# 寫入表格sheet1.write(row_id, col_id, value) # 保存文件 f.save(self.file_name) # 判斷文件是否存在 if not os.path.exists(self.file_name): print('生成excel失敗') return False print('生成excel成功') return Trueif __name__ == ’__main__’: MysqlToExcel().generate_table()

執行腳本,查看excel

python查詢MySQL將數據寫入Excel

以上就是python查詢MySQL將數據寫入Excel的詳細內容,更多關于python 查詢MySQL的資料請關注好吧啦網其它相關文章!

標簽: python
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品少妇| 香蕉视频成人在线观看| 国产精品a久久久久| 亚洲麻豆一区| 日本不卡中文字幕| 91高清一区| 风间由美中文字幕在线看视频国产欧美| 亚洲精品一区二区在线看| 国产午夜久久| 久久精品一区二区不卡| 日韩va亚洲va欧美va久久| 丝瓜av网站精品一区二区| 亚洲精品在线二区| 日韩综合一区| 成人看片网站| 久久中文字幕一区二区三区| 蜜桃av在线播放| 日本在线视频一区二区| 美女福利一区二区三区| 在线综合视频| 在线一区电影| 婷婷亚洲综合| 在线亚洲观看| 蜜桃久久av| 中文字幕一区二区三区日韩精品| 久久午夜影视| 日韩一区二区三区精品视频第3页| 亚洲色图国产| 日韩美女国产精品| 卡一精品卡二卡三网站乱码| 日本不良网站在线观看| 卡一卡二国产精品| 国产精品一区二区免费福利视频 | 日韩欧美另类中文字幕| 日韩一区二区三区在线看| 欧美一区在线观看视频| 久久av导航| 欧美成a人免费观看久久| 不卡一区综合视频| 久久久久伊人| 奇米777国产一区国产二区| 中文字幕日本一区二区| 亚洲午夜91| 久久免费大视频| 99久久精品国产亚洲精品| 国产欧美另类| 国产毛片一区二区三区| 精品久久电影| 蜜臀国产一区| 88xx成人免费观看视频库| 亚洲特级毛片| 久久成人国产| 国产劲爆久久| 综合亚洲视频| 青草国产精品久久久久久| 亚洲作爱视频| 免费久久99精品国产| 六月婷婷一区| 蜜芽一区二区三区| 99国产精品99久久久久久粉嫩| 国产福利一区二区精品秒拍 | 丝袜美腿高跟呻吟高潮一区| 日韩欧美另类中文字幕| 99久久精品国产亚洲精品| 欧美日韩一区二区国产| 日韩欧美三级| 欧美日本久久| 91精品福利| 性感美女一区二区在线观看| 麻豆国产一区| 国产精品a级| 国产剧情一区二区在线观看| 亚洲在线国产日韩欧美| 日日夜夜免费精品视频| 免费视频一区二区三区在线观看 | 亚洲va中文在线播放免费| 亚洲性视频在线| 欧美亚洲国产精品久久| 精品视频一区二区三区四区五区 | 免费人成黄页网站在线一区二区 | 婷婷精品在线观看| 亚洲一区免费| 免费在线观看日韩欧美| 日本aⅴ亚洲精品中文乱码| 日本少妇一区| 91精品91| 免费久久99精品国产自在现线| 蜜臀91精品一区二区三区| 国产一区不卡| 欧美日韩xxxx| 日韩av影院| 日韩欧美精品一区二区综合视频| 国产亚洲精品美女久久久久久久久久| 久久不见久久见免费视频7| 久久亚洲资源中文字| 欧美激情日韩| 日韩网站中文字幕| 久久久久久免费视频| 日韩一区二区三区免费| 国产精品嫩草99av在线| 麻豆精品蜜桃| 亚洲网址在线观看| 精品一区在线| 五月精品视频| 亚洲免费中文| 日韩精品一级| 国产亚洲高清在线观看| av亚洲一区二区三区| 蜜臀精品一区二区三区在线观看 | 久久99影视| 黄色国产精品| 免费在线播放第一区高清av| 一区二区亚洲视频| 麻豆成人av在线| 国产精品毛片一区二区三区| 国产一区二区三区网| 亚洲成人一区在线观看| 黄色aa久久| 国产高清视频一区二区| 黑丝一区二区| 国产欧美欧美| 麻豆91在线播放| 日韩精品欧美激情一区二区| 亚洲专区视频| 免费在线观看日韩欧美| 免费精品视频最新在线| 国产欧美日韩精品一区二区免费 | 国产亚洲一卡2卡3卡4卡新区| 日韩精品欧美成人高清一区二区| 久久久国产精品网站| 在线看片日韩| 午夜在线视频一区二区区别| 伊人久久大香线蕉av不卡| 免费观看亚洲天堂| 国产日韩中文在线中文字幕 | 国产激情欧美| 日韩免费一区| 国产一区日韩一区| 国产在线不卡一区二区三区| 欧美aa国产视频| 麻豆精品在线视频| 国产高清亚洲| 亚洲精品2区| 欧美中文一区二区| 日韩一区亚洲二区| 在线观看亚洲精品福利片| а√在线中文在线新版| 亚洲天堂成人| 国产精品老牛| 国产亚洲精品美女久久| 久久av一区| 国内一区二区三区| 精品伊人久久久| 亚洲成人国产| 日韩av网站免费在线| 久久国内精品| 日韩国产欧美一区二区| 国产网站在线| 亚洲精品系列| 国产aⅴ精品一区二区三区久久| 99久久精品费精品国产| 日韩欧美一区二区三区在线观看| 一区二区91| 婷婷综合激情| 亚洲在线观看| 国产精品黄色片| 久久久水蜜桃av免费网站| 鲁大师影院一区二区三区| 日韩精品1区2区3区| 美女在线视频一区| 婷婷综合在线| 国产精品天堂蜜av在线播放| 在线天堂中文资源最新版| 黄色免费成人| 国产精品一区二区三区美女| 亚洲不卡系列| 日韩在线观看中文字幕| 久久免费精品| 激情久久中文字幕| 免费看的黄色欧美网站| 国产精品视频一区视频二区| 香蕉人人精品| 日韩高清一区在线| 亚洲天堂1区| 国产调教精品| 久久精品影视| 国产麻豆精品| 红桃视频国产精品| 精品一区二区三区的国产在线观看 | 老牛影视精品| 免费观看在线综合色| 精品国内亚洲2022精品成人| 欧美精品一区二区久久| 欧美一区自拍| 午夜av一区| 久久超级碰碰| 视频在线观看国产精品| 黄色欧美在线| 亚洲狼人精品一区二区三区| 欧美亚洲日本精品|