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

您的位置:首頁技術(shù)文章
文章詳情頁

python查詢MySQL將數(shù)據(jù)寫入Excel

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

一、概述

現(xiàn)有一個(gè)用戶表,需要將表數(shù)據(jù)寫入到excel中。

環(huán)境說明

mysql版本:5.7

端口:3306

數(shù)據(jù)庫:test

表名:users

表結(jié)構(gòu)如下:

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 ’手機(jī)號(hào)’, `email` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT ’郵箱’, `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT ’創(chuàng)建時(shí)間’, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

插入3行數(shù)據(jù)

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() # 創(chuàng)建游標(biāo) cur.execute(sql) # 執(zhí)行sql命令 result = cur.fetchall() # 獲取執(zhí)行的返回結(jié)果 # print(result) cur.close() conn.close() # 關(guān)閉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('查詢結(jié)果為空') return False # 創(chuàng)建excel對(duì)象 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 # 計(jì)數(shù)器 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’]) # 日期轉(zhuǎn)換為字符串 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()

執(zhí)行輸出:

查看excel表

python查詢MySQL將數(shù)據(jù)寫入Excel

三、高級(jí)寫法

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

如果一個(gè)表有70個(gè)字段怎么辦?一個(gè)寫筆記耗時(shí)間,能不能動(dòng)態(tài)獲取表字段呢?答案是可以的。

由于我在創(chuàng)建游標(biāo)時(shí),指定了pymysql.cursors.DictCursor,它返回的每一行數(shù)據(jù),都是一個(gè)字典。

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

另外,我還得將查詢結(jié)構(gòu)中非string的轉(zhuǎn)換為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() # 創(chuàng)建游標(biāo) cur.execute(sql) # 執(zhí)行sql命令 result = cur.fetchall() # 獲取執(zhí)行的返回結(jié)果 # print(result) cur.close() conn.close() # 關(guān)閉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('查詢結(jié)果為空') return False # 創(chuàng)建excel對(duì)象 f = xlwt.Workbook() sheet1 = f.add_sheet(’Sheet1’, cell_overwrite_ok=True) # 第一行結(jié)果 row0 = result[0] # 列字段 column_names = list(row0) # 寫第一行,也就是列所在的行 for i in range(0, len(row0)): sheet1.write(0, i, column_names[i]) # 寫入多行 # 行坐標(biāo),從第2行開始,也是1 for row_id in range(1, len(result) + 1): # 列坐標(biāo) for col_id in range(len(column_names)):# 寫入的值value = result[row_id - 1][column_names[col_id]]# 判斷為日期時(shí)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()

執(zhí)行腳本,結(jié)果同上!

四、自適應(yīng)寬度

上面表格看著不美觀,寬度沒有自適應(yīng)。

解決方法:

增加一個(gè)方法,獲取寬度

def get_maxlength(self,value, col): ''' 獲取value最大占位長(zhǎng)度,用于確定導(dǎo)出的xlsx文件的列寬 col : 表頭,也參與比較,解決有時(shí)候表頭過長(zhǎng)的問題 ''' # 長(zhǎng)度列表 len_list = [] # 表頭長(zhǎng)度 width = 256 * (len(col) + 1) len_list.append(width) # 數(shù)據(jù)長(zhǎng)度 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() # 創(chuàng)建游標(biāo) cur.execute(sql) # 執(zhí)行sql命令 result = cur.fetchall() # 獲取執(zhí)行的返回結(jié)果 # print(result) cur.close() conn.close() # 關(guān)閉mysql 連接 return result def get_maxlength(self,value, col): ''' 獲取value最大占位長(zhǎng)度,用于確定導(dǎo)出的xlsx文件的列寬 col : 表頭,也參與比較,解決有時(shí)候表頭過長(zhǎng)的問題 ''' # 長(zhǎng)度列表 len_list = [] # 表頭長(zhǎng)度 width = 256 * (len(col) + 1) len_list.append(width) # 數(shù)據(jù)長(zhǎng)度 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('查詢結(jié)果為空') return False # 創(chuàng)建excel對(duì)象 f = xlwt.Workbook() sheet1 = f.add_sheet(’Sheet1’, cell_overwrite_ok=True) # 第一行結(jié)果 row0 = result[0] # 列字段 column_names = list(row0) # 寫第一行,也就是列所在的行 for i in range(0, len(row0)): sheet1.write(0, i, column_names[i]) # 寫入多行 # 行坐標(biāo),從第2行開始,也是1 for row_id in range(1, len(result) + 1): # 列坐標(biāo) for col_id in range(len(column_names)):# 寫入的值value = result[row_id - 1][column_names[col_id]]# 判斷為日期時(shí)if isinstance(value, datetime.datetime): value = result[row_id - 1][column_names[col_id]].strftime(’%Y-%m-%d %H:%M:%S’)# 獲取表格對(duì)象col = sheet1.col(col_id)if value: if isinstance(value, int): value = str(value) # 獲取寬度 width = self.get_maxlength(value,column_names[col_id]) # 設(shè)置寬度 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()

執(zhí)行腳本,查看excel

python查詢MySQL將數(shù)據(jù)寫入Excel

以上就是python查詢MySQL將數(shù)據(jù)寫入Excel的詳細(xì)內(nèi)容,更多關(guān)于python 查詢MySQL的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区精品在线观看| 日韩视频在线一区二区三区| 蜜臀精品久久久久久蜜臀| 欧美+日本+国产+在线a∨观看| 日韩啪啪电影网| 亚洲天堂免费电影| 欧洲在线一区| 精品日韩毛片| 中文一区二区| 成人av动漫在线观看| 免费国产自久久久久三四区久久| 精品日韩毛片| 美女91精品| 亚洲精品在线国产| 久久国产精品免费一区二区三区| 国产日本亚洲| 牛牛精品成人免费视频| 久久天堂影院| 色婷婷色综合| 欧美福利在线| 美日韩精品视频| 亚州精品视频| 国产乱码精品一区二区三区亚洲人| 久久超级碰碰| 久久精品国产久精国产| 国内揄拍国内精品久久| 精品国产一区二| 黑人精品一区| 一区二区自拍| 日韩精品视频网站| 卡一卡二国产精品| 国产超碰精品| 首页欧美精品中文字幕| 日韩成人午夜精品| 精品国产三区在线| 欧美综合另类| 日韩专区视频网站| 久久久精品国产**网站| 久久中文亚洲字幕| 欧美 日韩 国产一区二区在线视频| 蜜桃av一区二区三区电影| 欧美日韩亚洲国产精品| 国产一区二区精品久| 国内精品福利| 欧美在线看片| 日韩av福利| 亚洲精品日本| 国产99在线| 另类国产ts人妖高潮视频| 97se亚洲| 亚洲a在线视频| 日本一区二区三区中文字幕| 国产精品啊v在线| 999精品一区| 亚洲国产日韩欧美在线| 日韩国产在线观看一区| 日韩一区二区三区免费播放| 亚洲理论在线| 韩日一区二区| 蜜臀久久99精品久久久久宅男 | 国产成人精品一区二区三区在线| 久久精品亚洲欧美日韩精品中文字幕| 亚洲精品影视| 亚洲va中文在线播放免费| 亚洲天堂免费| 欧美少妇精品| 日韩免费精品| 波多野结衣一区| 国产在视频一区二区三区吞精| 视频一区二区三区在线| 成人午夜毛片| 日韩精品三区四区| 欧美理论视频| 精品久久久中文字幕| 天堂成人免费av电影一区| 日本欧美国产| 日韩高清不卡在线| 亚洲激情二区| av免费不卡国产观看| 综合一区在线| 麻豆精品蜜桃| 国产精品最新| 亚洲精品成人一区| 在线视频观看日韩| 麻豆国产精品视频| 亚洲91网站| 91久久中文| 日韩中文在线播放| 精品久久亚洲| 国产毛片精品| 亚洲精品美女91| 美女网站一区| 日本午夜大片a在线观看| 国产亚洲一区二区三区不卡 | 久久久久国产精品一区三寸| 国产精品一区免费在线| 美女精品在线| 日韩视频精品在线观看| 麻豆视频在线观看免费网站黄| 国产另类在线| 日韩av影院| 亚洲精品国模| 天使萌一区二区三区免费观看| 久久蜜桃av| 日本一二区不卡| 久久天堂影院| 欧美国产中文高清| 国产日本精品| 国产麻豆一区二区三区精品视频| 日韩在线观看一区二区| 亚洲特色特黄| 亚洲午夜黄色| 亚洲不卡av不卡一区二区| 日韩免费视频| 成人啊v在线| 久久精品免费一区二区三区| 日韩精品诱惑一区?区三区| 国产精品高颜值在线观看| 国产一区二区视频在线看| 卡一卡二国产精品| 精品国产鲁一鲁****| 欧美精品第一区| 久久av电影| 精品72久久久久中文字幕| 麻豆一区在线| 老司机精品视频在线播放| 麻豆精品一区二区综合av| 欧美精品三级在线| 国产日产高清欧美一区二区三区| 国产免费av国片精品草莓男男| 国产免费播放一区二区| 国产精品亚洲一区二区在线观看| 国产精品亲子伦av一区二区三区| 欧美日本久久| 麻豆91精品视频| 色婷婷色综合| 久久婷婷一区| 欧美午夜不卡| 日韩影院精彩在线| 亚洲人妖在线| 91精品一区| 国产精品一国产精品k频道56| 久久久国产精品入口麻豆| а√天堂中文在线资源8| 亚洲91精品| 丝袜美腿高跟呻吟高潮一区| 亚洲毛片一区| 欧美激情aⅴ一区二区三区 | 成人福利视频| 亚洲福利国产| 视频一区在线视频| 日韩高清国产一区在线| 日本欧美一区二区| 国产精品66| 国产综合色区在线观看| 亚洲国产日韩欧美在线| 亚洲精品免费观看| 国产精品九九| 欧美日韩尤物久久| 日韩影院精彩在线| 国产精品免费精品自在线观看| 日本一区二区高清不卡| 激情综合自拍| 亚洲+小说+欧美+激情+另类| 免费在线成人| 激情综合在线| 日本强好片久久久久久aaa| 国产精品v一区二区三区| 日韩在线不卡| 亚洲欧美网站在线观看| 美女精品视频在线| 国产精品av久久久久久麻豆网| 蜜臀av一区二区在线免费观看| 国产精品嫩模av在线| 日韩欧美一区二区三区在线观看| 亚洲一区二区三区中文字幕在线观看| 国产精品黄网站| 99久精品视频在线观看视频| 在线日韩成人| 国产精品yjizz视频网| 丝袜亚洲精品中文字幕一区| 国产精品三级| 99国产精品一区二区| 日本不卡一区二区三区| 国产va免费精品观看精品视频| 亚洲女同一区| 美日韩一区二区三区| 夜夜嗨一区二区| 精品色999| 亚洲综合丁香| 国产精品二区不卡| 亚洲精品系列| 日韩大片免费观看| 日本天堂一区| 欧美成人久久| 精品日韩一区| 亚洲不卡视频| 少妇久久久久| 国产精品免费大片| 视频一区二区不卡|