python读取ddl生成sql建表语句
# 导入需要的库
import pandas as pd
import os
def read_ddl_create_tab_sql(file_path:str,table_name:str):
df = pd.read_csv(file_path,sep='\|\@\|',index_col=0,header=None,encoding='utf-8',engine='python')
inds,cols = df.shape
# print(df.head())
df = df.fillna(0)
print(df.head())
# 循环生成Oracle建表语句
table_definition = ''
col_commit = ''
for ind in range(inds):
col_name = df.iloc[ind,0]
col_type = df.iloc[ind,1]
col_length_0 = df.iloc[ind,2]
col_length_1 = df.iloc[ind, 3]
not_null = df.iloc[ind,4]
is_pk = df.iloc[ind,5]
col_comments = df.iloc[ind,6]
if col_type == 'DATE':
table_definition += col_name + " " + col_type + (' NOT NULL' if is_pk == 'Y' else '') + ('' if ind == inds-1 else ",\n")
if col_type == "VARCHAR2":
table_definition += col_name + " " + col_type + '({})'.format(int(col_length_0)) + (' NOT NULL' if is_pk == 'Y' else '') + \
('' if ind == inds - 1 else ",\n")
if col_type == 'NUMBER':
col_type_num = ''
if col_length_0 >0 and col_length_1 >0:
col_type_num = '({},{})'.format(int(col_length_0), int(col_length_1))
elif col_length_0 > 0 and col_length_1 == 0:
col_type_num = '({})'.format(col_length_0)
else:
col_type_num = ''
table_definition += col_name + " " + col_type + \
col_type_num + \
(' NOT NULL ' if is_pk == 'Y' else '') + \
('' if ind == inds-1 else ",\n")
col_commit = col_commit + "comment on column "+table_name+"." + col_name+ " is '{}'".format(col_comments) + ";\n"
# 输出建表语句
drop_tab_sql = 'DROP TABLE {} PURGE;'.format(table_name)
create_sql_str = drop_tab_sql + '\n' + 'CREATE TABLE ' + table_name + ' (' + table_definition + ') TABLESPACE TSODSDAT;\n' + col_commit
# print(create_sql_str)
with open("./create_tab_sql/{}.sql".format(table_name), 'w',encoding='utf-8') as f:
f.write(str_s)
return create_sql_str
def del_file(dir):
for f in os.listdir(dir):
os.remove(os.path.join(dir, f))
# 读取数据文件
file_path = './ddl_data/'
del_file("./create_tab_sql/")
str_s = ''
for etm in os.listdir(file_path):
if etm.split('.')[1] == 'ddl' and '_TX_' in etm:
table_name,name_suffix = etm.split("_D_")
str_s = str_s + read_ddl_create_tab_sql(file_path+etm,table_name) + '\n\n'
# os.remove("./create_tab_sql/create_table_sql.sql")
with open("./create_tab_sql/create_table_sql.sql",'w',encoding='utf-8') as f:
f.write(str_s)
自动化学习。

浙公网安备 33010602011771号