python 連接數據庫,查詢結果寫入數據到excel


使用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))

 


免責聲明!

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



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