用python指令碼匯出mysql資料庫查詢結果到Excel表
阿新 • • 發佈:2018-11-10
最近需要導資料的情況太多,總用跳板機上的navicat工具有點效率低,也覺得挺麻煩的(由於跳板機無法連通外網 所以匯出資料檔案還得通過sftp傳到本機)
anyway 還是寫個指令碼好了。之前寫過一個shell指令碼做的定時匯出任務,現在試試用python寫下
主要用到的庫有:
pymysql -- 連資料庫的無需多說
os & sys -- 可能回涉及到工作目錄或者外部傳參
xlwt -- 寫excel
下面就是程式碼了,總體還是挺簡單的,主要遇到個字元編碼的問題,改成utf-8就解決了
還有個沒解決掉的問題: select的結果沒有欄位名,所以....檔案第一行的欄位我是手動加進去的 =.=
#!/usr/bin/python # -*- coding: cp936 -*- # security:資料庫相關的敏感引數最好通過傳參形式傳入而非寫入指令碼 import pymysql import xlwt import os,sys def dbConnect(dburl): db_user = sys.argv[1] db_pass = sys.argv[2] db_name = raw_input("要使用的資料庫:") db_conn = pymysql.connect(dburl,db_user, db_pass, db_name)# db_name傳參失敗?編碼問題"?" return db_conn def sqlOpt(opt): db_conn = dbConnect("localhost") cur = db.cursor() cur.execute(opt) data = cur.fetchall() db_conn.close() return data def write_to_excel(content): os.chdir("/home/appuser/export_mysql_data/") filename = raw_input("請輸入要儲存的檔名,無需字尾:") + '.xls' wbk = xlwt.Workbook(encoding='utf-8') test = wbk.add_sheet('test',cell_overwrite_ok=True) # ?如何獲取列名 fileds = [u'ID',u'name',u'sex',u'birth',u'department',u'address'] trans_data = list(content) # 寫入列名 for filed in range(0,len(fileds)): test.write(0,filed,fileds[filed]) for row in range(1,len(trans_data)+1): for col in range(0,len(fileds)): test.write(row,col,str(trans_data[row-1][col])) wbk.save(filename) def run_Task(): sql = raw_input("請輸入sql查詢語句:") result = sqlOpt(sql) write_to_excel(result) run_Task()