使用Python鏈接數據庫查詢數據,並將查詢結果寫入到Excel中,實現方法上主要有兩步,第一,查數據,第二,寫Excel。
一、導入需要的包
import time import xlwt from commontool import dbtool import os
二、查數據,並返回查詢結果
查詢數據傳入指定日期,使用指定日期在數據庫中查詢該日期區間的交易。因為傳入的日期為字符串,第一步需要將傳入的字符串轉換成時間數組,第二步再將傳入的日期轉換成自己想要的時間格式。
class writefile: file = r"F:\python\PycharmProjects\pythonpractice\fileshandle\Files"
def querydata(self,date): """查詢數據庫結果""" self.date = date datestruct = time.strptime(self.date,"%Y%m%d") # 將字符串轉換成時間數組 date = time.strftime("%Y-%m-%d",datestruct) # 將時間轉換成其他格式 starttime = date + ' 00:00:00' endtime = date + ' 23:59:59' db = dbtool.db() orderquery = "select merchantid,payorderid,state,paytime,innerbank from ordersummary where paytime between '%s' and '%s' ; " %(starttime,endtime) res = db.dbquery(db.dbconnect()[3],orderquery).fetchall() return res
三、將查詢結果寫入到Excel
將查詢結果寫入到Excel,這里使用的是xlwt模塊,首先要做的是:創建一個Excel,再創建一個sheet頁,需要表頭的話,也需要寫一個表頭。表頭的格式是一個列表。
這里需要注意的是:
(1)range函數是不包含stop數的,所以這里要寫入查詢的全部數據的話,需要給len(res)+1。比如:查詢結果有5個,range(1,4)時,只能是1,2,3,4,就會漏掉5,所以需要給查詢結果加上一個1。
(2)row = 1代表Excel的第二行(第一行是表頭),那么在第二行要寫入查詢的數據的話,應該寫入查詢數據的第一行,所以 sheet.write(row,col,res[row-1][col]) 中使用了row-1。
def write_excel(self,res): """操作Excel""" book = xlwt.Workbook() # 新建一個Excel sheet = book.add_sheet('導出數據') # 創建sheet title = ['商戶號','流水號','交易狀態','交易時間','交易渠道'] # 寫表頭 # 循環將表頭寫入到sheet頁 i=0 for header in title: sheet.write(0,i,header) i+=1 # 寫數據 for row in range(1,len(res)+1): for col in range(0,len(res[row-1])): sheet.write(row,col,res[row-1][col]) col+=1 row+=1 book.save(self.file+"\交易導出.xls") print("導出成功")
四、判斷生成Excel是否重復
文件生成是在一個路徑下,要重復生成需要判斷該路徑下是否存在該文件,如果存在,則刪除,或者重命名,再或者移動到備份路徑下,這里使用的是重復就刪除。
刪除文件這里使用到了os模塊。
def judge_file_exist(self): if os.path.exists(self.file+"\交易導出.xls"): os.remove(self.file+"\交易導出.xls")
五、主要流程就是以上幾步,現在需要主函數將其串起來。
先判斷文件是否存在,然后在調用寫文件方法。
def writefile(self): date = '20191028' self.judge_file_exist() self.write_excel(self.querydata(date))