### 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('导出完毕!')