python3导出oracle表信息到表格

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#author xiaoyi
import cx_Oracle as oracle
import sys
import os
import io
import xlwt
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' #或者os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'
class ExportOracle:
    def __init__(self,odbc,user):
        self.odbc = odbc
        self.user = user
        self.xlsx = xlwt.Workbook(encoding="utf-8")
        self.curIndex = 0;

    def start(self):
        db = oracle.connect(self.odbc)
        cursor = db.cursor()
        cursor.execute("SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = '%s'" % (self.user))
        datas = cursor.fetchall()
        for tabName in datas:
           self.getTableInfo(cursor,tabName[0]);

        cursor.close()
        db.close();
        self.xlsx.save('./tables/tables.xlsx')
        print("导出完毕!")

    def getPrimary(self,mcursor,tableName):
        strsqlp = """
        select COLUMN_NAME from user_cons_columns where table_name = '%s' GROUP BY COLUMN_NAME
          """%(tableName)
        mcursor.execute(strsqlp);
        res = mcursor.fetchall();
        resStr = "";
        for item in res:
            resStr += item[0]+','
        return resStr.rstrip(',')

    def getTableInfo(self,mcursor,tableName):
        print("表名称:%s"%tableName)
        #获取表字段
        strsql = """
        SELECT
          b.COLUMN_NAME,b.DATA_TYPE,b.DATA_LENGTH,a.COMMENTS
         FROM
          USER_TAB_COLUMNS b,USER_COL_COMMENTS a
        WHERE
          b.TABLE_NAME = '%s' AND b.TABLE_NAME = a.TABLE_NAME AND b.COLUMN_NAME = a.COLUMN_NAME
          """%(tableName)
        #初始化xls
        sheet = self.xlsx.add_sheet(tableName, True )
        self.curIndex = 0;
        sheet.write(self.curIndex, 0,"字段名")
        sheet.write(self.curIndex, 1,"字段属性")
        sheet.write(self.curIndex, 2,"主键")
        sheet.write(self.curIndex, 4,"字段解释")
        mcursor.execute(strsql);
        res = mcursor.fetchall();
        prik = self.getPrimary(mcursor, tableName)
        for x in res:
            self.curIndex = self.curIndex+1
            remark = "";
            pk = ""
            if(x[0] == prik ):
                pk="Y"
            if(x[3]!=None and x[3]!='None'):
                try:
                    remark = x[3]
                    print(remark)
                except Exception as e:
                    print(e)

            sheet.write(self.curIndex, 0,x[0])
            sheet.write(self.curIndex, 1,x[1])
            sheet.write(self.curIndex, 2,pk)
            sheet.write(self.curIndex, 4,remark)

if __name__ == '__main__':
    orcleDb_config = {
        'odbc':'xiaoyi/xiaoyi@127.0.0.1:1521/orcl',
        'user': 'XIAOYI',
    }
    mtables = ExportOracle(orcleDb_config['odbc'],orcleDb_config['user']);
    mtables.start();





另附上xlwt官网

python连接oracle链接

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值