如何使用python將MySQL中的查詢結果導出為Excel----xlwt的使用


如何在MySQL中執行的一條查詢語句結果導出為Excel?

一、可選方法

1、使用sql yog等遠程登錄,執行查詢語句並導出結果集為Excel

  適用於較簡單的查詢結果集的導出

  如果需要多個SQL語句的查詢結果合並起來導出為一個Excel則操作起來會比較繁瑣。

2、使用python連接MySQL執行SQL語句並導出為Excel

  操作簡單,且可以在腳本中設置好Excel的輸出格式。

 

二、如何使用python將查詢結果導出為Excel?

1、python連接MySQL進行查詢

  若想要使用python連接MySQL,我們必須首先確保python中有[pymysql]這一個模塊。(該測試環境為python3)。

  1.1  pymysql的安裝

    打開cmd,使用pip命令進行安裝。

# pip install pymysql

  1.2 python連接MySQL並執行SQL獲取結果集

    以下是python連接數據庫並獲取結果集的最簡單的使用方法,目的是讓大家可以對最基礎的實現函數有個簡單的了解。

    代碼的大致流程是,使用指定賬號連接數據庫,開啟一個游標,執行SQL,獲取結果集,關閉游標,關聯數據庫連接。代碼如下:

import pymysql  #導入模塊

con = pymysql.connect('ip','用戶','密碼','指定數據庫',charset='utf8') #連接數據庫
cur = con.cursor()  #定義一個游標
cur.execute(sql)  #執行SQL,sql為你要執行的SQL語句,如果是簡單的SQL語句使用''單引號引起來就好,如果SQL較復雜,可以使用“”雙引號代替
result = fetchall() #獲取全部查詢結果,fetchone()獲取結果集的第一個數據
cur.close() #關閉游標
con.close() #關閉數據庫連接

   1.3 定義一個執行SQL的函數,通過傳參的方式將指定參數傳入SQL。

     可以稍微對SQL的進行一些靈活性的改變,但是限制還是比較大。如:一個SQL查詢不同班級的數據,班級的編號可以設置為傳參,簡化腳本。

     當然也可以之間將整個SQL作為一個參數傳入函數,以達到

def execude_sql(args): #定義一個執行SQL的函數
  con = pymysql.connect('ip','用戶','密碼','指定數據庫',charset='utf8') #連接數據庫   cur = con.cursor()  #定義一個游標 
  cur.execute('select id,name from student where class =%s',args)  #args即要傳入SQL的參數
  result = fetchall()
  cur.close()
  con.close()

execude_sql(1024) #調用函數,查詢class=1024的id和name


或者
def execude_sql(SQL):  #定義一個執行SQL的函數
  con = pymysql.connect('ip','用戶','密碼','指定數據庫',charset='utf8') #連接數據庫
  cur = con.cursor()  #定義一個游標 
  cur.execute(SQL)  #執行指定SQL
  result = fetchall()
  cur.close()
  con.close()
execude_sql('select id,name from student where class =1024') #調用函數,查詢class=1024的id和name


 

2、python寫入Excel ------ xlwt

  2.1 簡單的寫入數據操作

   python寫入Excel需要一個模塊[xlwt],可想而知還有一個模塊可專門用來讀取Excel,這個模塊較[xlwr],當然,本文重點主要是xlwt的使用。

   以下我們通過定義一個寫入excel的函數,直接完成SQL的執行以及寫入excel,這種情況只能適用於將一整個SQL的查詢結果寫入excel的,比較簡單。但是可能更多的時候我們對於一個excel的設計是一個SQL的查詢無法滿足的,需要拼接多個SQL的查詢結果,如果是這種情況,我們可以先自定義一個SQL的執行函數,然后根據excel的設計來編寫excel的寫入函數。

   以下示例只是簡單的表達以下代碼所實現的功能:

import xlwt
def wite_to_excel(name):
  filename = name + '.xls' #定義Excel名字
  wbk = xlwt.Workbook() #實例化一個Excel
  sheet1 = wbk.add_sheet('sheet1',cell_overwrite_ok=True) #添加該Excel的第一個sheet,如有需要可依次添加sheet2等
  fileds = [u'ID編號',u'名字'] #直接定義結果集的各字段名
  execude_sql(1024) #調用函數執行SQL,獲取結果集
  for filed in range(0,len(fileds)): #寫入字段信息
    sheet1.write(0,filed,fileds[i])
  for row in range(1,len(result)+1):  #寫入SQL查詢數據
    for col in range(0,len(fileds))
      sheet1.write(row,col,result[row-1][col])
  wbk.save(filename)  #保存Excel

  當然,獲取Excel的字段信息也可以直接根據我們SQL語句來自動獲取,這時我們就需要在開啟執行SQL的游標后添加一條命令 fileds = cur.description即可。

  2.2 Excel格式調整

  直接導出的數據格式上難免有些參差不齊,我們可以使用xlwt來對Excel輸出格式進行適當的調整。

def set_style(name,height,bold=False):    
  style = xlwt.XFStyle() # 初始化樣式   font = xlwt.Font() # 為樣式創建字體   font.name = name # 'Times New Roman'   font.bold = bold #是否加粗,默認不加粗   font.color_index = 4   font.height = height #定義字體大小   style.font = font
  alignment
= xlwt.Alignment() #創建居中   alignment.horz = xlwt.Alignment.HORZ_CENTER #可取值: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED   alignment.vert = xlwt.Alignment.VERT_CENTER # 可取值: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED   style.alignment = alignment # 文字居中

  添加以上格式調整的函數之后,在寫入Excel時只需指定相應的格式即可,eg:        sheet1.write(0,filed,fileds[i],set_style('宋體','200',True))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM