如何在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))