數據庫查詢轉excel小工具

因業務需求須要常常從數據庫拉數據生成exceljava

每次都從數據庫軟件中操做賊煩 python

 因而本身隨便寫了一個 程序員

有須要得拿去用吧web

 

import psycopg2
import psycopg2.pool
import xlsxwriter

class Sql:
    '''
    database:庫名
    user:用戶名
    password:密碼
    host:地址
    port:端口
    '''
    def __init__(self,database,user,password,host,port):
        self.database=database
        self.user=user
        self.password=password
        self.host=host
        self.port=port
    def _sql(self):
        self.conn = psycopg2.connect(database=self.database, user=self.user,
                                     password=self.password,host=self.host, port=self.port)
        self.cursor = self.conn.cursor()

    def close(self):
        self.cursor.close()
        self.conn.close()


    def select(self,sql,args=None):
        self._sql()
        #查詢語句
        try:
            self.cursor.execute(sql,args)
            coloumns = [row[0] for row in self.cursor.description]
            result = [[str(item) for item in row] for row in self.cursor.fetchall()]
            return [dict(zip(coloumns, row)) for row in result],coloumns
        except Exception as ex:
            print(ex)
        finally:
            self.close()

    def execute(self,sql,args=None):
        ###修改提交語句
        self._sql()
        try:
            self.cursor.execute(sql,args)
            self.conn.commit()
            res=self.cursor.rowcount
            return res
        except Exception as x:
            print(x)
        finally:
            self.close()




def run(title,field,wbk,data,sheet_name):

    sheet1 = wbk.add_worksheet(sheet_name)
    get_excel(sheet1, title, data, field)


def get_excel(sheet,cov,res,rov):
    row=1
    sheet.write_row('A1', cov)
    for line in res:
        l=[]
        for i in range(len(rov)):
             l.append(line[rov[i]])
        sheet.write_row(row, 0, l)
        row += 1

if __name__ == '__main__':
    wbk = xlsxwriter.Workbook('weibo.xlsx')####生成excel對象
    sql = Sql("uniqlo_reviews_analytics","bigodata","B1g0uniqlo","117.50.14.201","22432")###生成Sql類
    post_data , columns = sql.select('''select * from stagingdata.posts WHERE createrdtime::date BETWEEN '{0}'::date and '{1}'::date 
                  '''.format('2019-05-01','2019-05-31'))####返回數據集  和全部字段集
    title=['帖子id','發帖人','微博內容','發帖時間','評論數','轉發數','點贊數']#標題名 也能夠傳columns
    field=['posterid','postername','weibo','createrdtime','hnum','forward','aproval']#字段名  也能夠傳columns
    
    reply_data, columns = sql.select('''select * from stagingdata.reply t1 WHERE  EXISTS 
                  (select 0 from stagingdata.posts WHERE createrdtime::date BETWEEN '{0}'::date and '{1}' and 
                t1.posterid=posterid)
                      '''.format('2019-05-01', '2019-05-31'))  ####返回數據集  和全部字段集
    title1 = ['評論id', '評論內容', '評論時間','帖子id']  # 標題名 也能夠傳columns
    field1 = ['commentid', 'comment_text', 'comment_time',  'posterid']  # 字段名  也能夠傳columns

    run(title,field,wbk,post_data,'帖子')
    run(title1, field1, wbk, reply_data,'評論')
    wbk.close()

 

在很大程度上,python更注重可讀性、一致性和軟件質量,python的設計致力於可讀性,帶來了比其餘語言更優秀的可重用性和可維護性,python秉承了一種獨特的簡潔和高可讀性的語法,以及一種高度一致的編程序模式。sql

相對於C、C++、Java等編輯/靜態類型語言,python的開發效率提高了3-5倍,也就是說代碼量是其餘編程語言的1/5-1/3,並且無需編譯、連接步驟,提升程序員效率數據庫

絕大多數python程序能不作任何修改便可在全部主流計算機平臺上運行,此外,python提供多種可選的獨立程序,如用戶圖形界面、數據庫接入、基於web系統、還提供了操做系統接口等。編程

python內置了衆多預編譯並可移植的功能模塊,涵蓋了從字符模式到網絡編程等一系列應用級編程任務;此外,python可經過自行開發的庫和衆多的第三方庫簡化編程,第三方庫包括網站開發、數值計算、串口編寫、遊戲開發等各個應用場景。網絡

python腳本經過靈活的集成機制輕鬆的與應用程序的其餘部分進行通訊,這種集成使得python成爲產品定製和擴展的工具,現在,python程序能夠與C、C++相互調用,能夠與java組件集成,與COM、.NET礦建通訊。app

python的易用性和強大的內置工具和第三方庫使得編程成爲一種樂趣而不是瑣碎的重複勞動。

編程語言

相關文章
相關標籤/搜索