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