[PYTHON]使用python將Oracle數據庫結構導出爲定製的word文檔

思路:   1.使用DocxTemplate庫對word文件進行操作;
        2.在數據庫中創建臨時表,表內容爲該用戶下面所有的表,並且加上序號和狀態兩個字段,語句如下:
        創建臨時表create table BALL AS select T.*,ROWNUM PAGES,'0' STATUS from user_tab_comments T;
        3.循環查詢臨時表ball狀態等於0的行,跑出行對應的表的所有字段信息寫入word;
        4.寫入完成後改變ball該行的狀態值爲1,表明該行處理完畢;

word模板是 :             

 

描述:{{bzs}}

表 {{page}} {{tablename}}

序號

字段名稱

字段描述

字段類型

長度

允許空

缺省值

{%tr for row in rows %}

{{row.xh}}

{{row.zdmc}}

{{row.zdms}}

{{row.zdlx}}

{{row.cd}}

{{row.yxk}}

{{row.qsz}}

{%tr endfor %}

模板下載連接:https://download.csdn.net/download/black_liu8561/11021767

               

 

以下是PY代碼,代碼寫得稍微有點亂,現階段是以實現爲主,將就看,過段時間整理一下。

from docxtpl import DocxTemplate
import cx_Oracle

def create_word(data,templatepath,filepath,filename):
    '''
    根據模板創建docx文件的函數
    :param data: docxtemplate模塊所需字典,直接和docx文件進行關聯
    :param templatepath: docx模板路徑
    :param filepath: 保存的文件夾路徑
    :param filename: 保存的文件名
    :return: 生成一個docx文件
    '''

    doc = DocxTemplate(templatepath)
    context = data
    savepath=filepath+filename+'.docx'
    doc.render(context)
    doc.save(savepath)


def create_docx(dbinfo,templatepath,filepath):
    '''
    讀取數據庫數據並封裝成字典後傳給create_word函數生成docx文件
    :param dbinfo: 數據庫信息
    :return:
    '''
    connection = cx_Oracle.Connection(dbinfo)
    cursor = connection.cursor()
    sql='select * from ball where status=0'
    cursor.execute(sql)
    result=cursor.fetchone()
    data={}
    data['tablename']=result[0]
    data['page']=result[3]
    data['bzs']=result[2]
    cursor.close()
    #上述查詢臨時表數據
    l=[]
    cursor = connection.cursor()
    sql1='''select rownum xh,t.COLUMN_NAME zdmc,t1.comments zdms,t.DATA_TYPE zdlx,t.DATA_LENGTH cd,t.NULLABLE,t.DATA_DEFAULT qsz from user_tab_cols t,user_col_comments t1
     where t.COLUMN_NAME=t1.column_name(+) and
     t.TABLE_NAME={0} and t1.table_name={1}'''.format("'"+data['tablename']+"'","'"+data['tablename']+"'")
    cursor.execute(sql1)
    result1=cursor.fetchall()
    for i in result1:
        row = {}
        row['xh']=i[0]
        row['zdmc'] = i[1]
        row['zdms'] = i[2]
        row['zdlx'] = i[3]
        row['cd'] = i[4]
        row['yxk'] = i[5]
        row['qsz'] = i[6]
        l.append(row)
    data['rows']=l
    create_word(data,templatepath=templatepath,filepath=filepath,filename=data['tablename'])
    #創建文件
    cursor = connection.cursor()
    sql2 = '''update ball t set t.status=1 where t.table_name={0}'''.format("'"+data['tablename']+"'")
    cursor.execute(sql2)
    connection.commit()
    cursor.close()
    #修改狀態
    print(data['tablename']+'已生成')


dbinfo="username/passwd@localhost:1521/instance"
templatepath=r"C:\Users\Administrator\Desktop\test.docx"
filepath="C:\\Users\\Administrator\\Desktop\\"
#配置:數據庫連接信息,docx模板位置,存儲目錄

while 1==1:
    create_docx(dbinfo=dbinfo,templatepath=templatepath,filepath=filepath)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章