1. 程式人生 > >用python腳本導出mysql數據庫查詢結果到Excel表

用python腳本導出mysql數據庫查詢結果到Excel表

oca ret argv address add sftp ... xlwt 需要

最近需要導數據的情況太多,總用跳板機上的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()

用python腳本導出mysql數據庫查詢結果到Excel表