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