使用Python導出Oracle數據庫數據表目錄

### Oracle數據庫數據表目錄導出
### 導入包
import pandas as pd
import cx_Oracle

### 數據庫信息
username = 'xxx'
password = 'yyy'
ipaddr = '100.28.60.132'
port = '1521'
service_name = 'service_name'
connect_string=ipaddr+":"+port+"/"+service_name

### 創建連接
con = cx_Oracle.connect(username,password,connect_string)
print('創建連接成功!')

### 腳本1-獲取表目錄信息
sql_tab_list='select row_number() over(order by null) 序號,\
       a.table_name 數據庫表名,\
       replace(nvl(a.comments,a.table_name),'+"'/'"+') 數據項,\
       b.num_rows 數據量\
  from user_tab_comments a, user_tables b\
 where a.table_name = b.table_name'

df_tab_list=pd.read_sql(sql_tab_list,con)
print('表目錄信息獲取成功!')


### 腳本2-獲取表字段明細信息
sql_columns_detail='select c.comments 表名,\
       a.table_name 表,\
       a.column_name 字段,\
       a.data_type 字段類型,\
       a.data_length 字段長度,\
       b.comments 字段名稱,\
       count(*) over(partition by a.table_name) 總字段數\
  from user_tab_columns a, user_col_comments b, user_tab_comments c\
 where a.table_name = b.table_name\
   and a.column_name = b.column_name\
   and a.table_name = c.table_name\
 order by c.table_name, a.column_id'

df_columns_detail=pd.read_sql(sql_columns_detail,con)
print('表字段明細信息獲取成功!')

### 關閉數據庫連接
con.close()

### 數據寫入excel
writer = pd.ExcelWriter('xxx數據目錄導出.xlsx')
df_tab_list.to_excel(writer,sheet_name='數據目錄',index=False)
print('\t導出 數據目錄')
for tab_name in df_tab_list.數據庫表名.unique():
    df_tmp=df_columns_detail[df_columns_detail.表==tab_name]
    df_tmp.to_excel(writer,sheet_name=df_tab_list[df_tab_list.數據庫表名==tab_name].iat[0,2],index=False)
    print('\t導出 '+df_tab_list[df_tab_list.數據庫表名==tab_name].iat[0,2])
writer.close()
print('導出完畢!')

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