mysql导出数据表 .xls_mysql数据库导出xls-自定义
使用python編寫腳本,一鍵式導(dǎo)出sql語(yǔ)句執(zhí)行結(jié)果到xls表格中,每條語(yǔ)句結(jié)果一個(gè)標(biāo)簽頁(yè)
v1,本地運(yùn)行
文件列表:
bm.py? 主程序
bm_sqlcon.py?? 數(shù)據(jù)庫(kù)連接,查詢模塊
sql.py??? 初始化數(shù)據(jù)庫(kù)查詢語(yǔ)句
xls.py??? 寫入xls文件模塊
需要安裝第三方模塊
easy_install mysql-connector-python
pip install xlwt
實(shí)現(xiàn)了結(jié)果格式轉(zhuǎn)換,時(shí)長(zhǎng)計(jì)算使用百納秒到小時(shí):分:秒:幀。設(shè)置單元格日期格式,轉(zhuǎn)換數(shù)字為漢字說(shuō)明,設(shè)置列寬。
語(yǔ)句未做交互
def s_t(bnm):
bnm=int(bnm)
miao=bnm//10**7
#print(miao)
fen=miao//60
xs=miao//3600
dual=(bnm/10**7-miao)*25
dual=round(dual)
miao=miao%60
fen=fen%60
fh=str(xs)+':'+str(fen)+':'+str(miao)+':'+str(dual)
return fh
v2 版本可以考慮增加網(wǎng)頁(yè)交互
學(xué)到的知識(shí):
1、主函數(shù)邏輯:
==》獲取查詢sql語(yǔ)句,存入字典中。可以使用key為中文的字典,后期直接輪詢?nèi)ey賦值給標(biāo)簽
==》輪詢語(yǔ)句字典,取出語(yǔ)句傳遞給sqlcon模塊,執(zhí)行查詢,返回結(jié)果是一個(gè)包含元組的列表。元組是行信息
==》結(jié)果寫入字典,進(jìn)行數(shù)據(jù)預(yù)處理,具體處理調(diào)用不同函數(shù),此時(shí)遇到一個(gè)問(wèn)題是元組內(nèi)容是不可變,的所以需要先轉(zhuǎn)成列表,修改完后再轉(zhuǎn)成元組。(如果就用列表應(yīng)該也可以)
==》傳給xls模塊,設(shè)定單元格屬性,加邊框,設(shè)置列寬,顯示方式,寫入xls。
2、處理字典數(shù)據(jù)時(shí),遇到變量類型問(wèn)題,因?yàn)閜ython3是隱式轉(zhuǎn)換格式的,函數(shù)傳遞的數(shù)字型的字符串被識(shí)別成了數(shù)字,
在if語(yǔ)句中與字典中的數(shù)字型字符串進(jìn)行比較判斷時(shí),無(wú)法通過(guò)。最后通過(guò)強(qiáng)制轉(zhuǎn)換類型的方式解決。
stat_dict={'20':'編目中','40':'審核中','1000':'完成'}
for k in stat_dict:
#print(key,k,stat_dict[k])
if(k==str(key)):
return stat_dict[k]
包括上面的數(shù)字轉(zhuǎn)換函數(shù),也涉及到了類型轉(zhuǎn)換,數(shù)字拼接字符串
3、處理字典數(shù)據(jù)時(shí),因涉及到各種取值 ,各種運(yùn)算。所以對(duì)字典值進(jìn)行了賦值給另一個(gè)變量,
因?yàn)樽值涞闹凳橇斜磉@樣的高級(jí)數(shù)據(jù)結(jié)構(gòu),在直接賦值時(shí),采用的為淺copy方式,結(jié)果修改變量的值,原始字典竟然會(huì)變化。
如此,猜測(cè)淺copy的變量,可以向指針一樣使用。
4、處理查詢結(jié)果時(shí),因?yàn)榉祷氐闹挥薪Y(jié)果,沒(méi)有列名,需要手動(dòng)增加列名。構(gòu)造一個(gè)含有列名元組的列表,和數(shù)據(jù)列表進(jìn)行+的拼接,非常方便。
列名的獲取,本來(lái)是通過(guò)游標(biāo)的cursor.description獲取的,結(jié)果獲取結(jié)果是元組,還有其他信息,這到還能處理,
但是查詢語(yǔ)句中帶有公式時(shí)count(*)這種,就很麻煩,取出的值不是字符串,而是字節(jié)碼。經(jīng)過(guò)折騰還是沒(méi)有能統(tǒng)一處理,最后手動(dòng)構(gòu)建了列名列表實(shí)現(xiàn)
5、數(shù)據(jù)庫(kù)操作,可以放到try: except:語(yǔ)句,進(jìn)行錯(cuò)誤處理。而且數(shù)據(jù)的連接信息,可以寫到字典中,通過(guò)可變參數(shù)傳遞調(diào)用。
try:
conn = mysql.connector.connect(**config)
except mysql.connector.Error as e:
print('open database failed !{} '.format(e))
6、字典初始化時(shí),可以在{中}每個(gè)鍵值對(duì)寫一行,不需要特殊換行符\
7、分模塊編程時(shí),可以在模塊中寫入test()函數(shù),寫入調(diào)試數(shù)據(jù),對(duì)模塊進(jìn)行調(diào)試,引入時(shí),這些是不會(huì)執(zhí)行的
8、可以在語(yǔ)句中加入print()函數(shù),輸出變量的值,來(lái)判斷邏輯錯(cuò)誤,測(cè)試好后可以#注釋掉,更換測(cè)試條件可以再?gòu)?fù)制一份,盡量保留測(cè)試記錄
其他知識(shí):
打開文件時(shí),可以是用with as 方式,進(jìn)行錯(cuò)誤判斷
涉及文件操作open的都寫入字符編碼,防止中文亂碼
總結(jié)
以上是生活随笔為你收集整理的mysql导出数据表 .xls_mysql数据库导出xls-自定义的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql换服务器后数据同步_mysql
- 下一篇: mysql中有主键和外键吗_谈谈mysq