在数据开发中,我们有时会接触到表结构信心存储在Excel文件中,需要我们根据提供的字段建表,此代码就是用Python中的pandas模块,把Excel表转化为DataFrame类型,进而生成建表语句。
这里提供一种写法仅供参考。
import pandas as pd
#1.读取文件路径
path = 'd:/framework/file/tableschema.xlsx'
#2.写入文件路径
input = open('d:/framework/file/createtable.txt','w')
#3.读取数据,指定读取excel文件的sheet页,转换为dataframe
file1 = pd.read_excel(path,sheet_name='sheet2')
#4.选择需要的列内容
file2 = file1[['table_name','table_comments','column_name','column_comments']]
#5.按照表名进行分组,要是有多个可以写成:file2.groupby(['table_name','table_comments'])
file_info = file2.groupby('table_name')
#6.对表名去重,转换为list类型,方便后续调用
table_names = file2['table_name'].drop_duplicates().tolist()
table_names_len = len(table_names)
for i in range(table_names_len):
#7.根据分组情况,获取各表的表结构,这里的入参需指定分组的key。
# 如果按照两列进行了分组,则可以写成:file_info.get_group(['table_name1','table_name2'])
file_schema = file_info.get_group(table_names[i])
#8.获取表的列名
file_columns = file_schema[['column_name','column_comments']]
#9.去重,获取该表的表名和表注释
table_name = file_schema.drop_duplicates(subset=['table_name','table_comments'])[['table_name','table_comments']]
#10.把列和列注释转换为list
file_column_name = file_columns['column_name'].tolist()
file_column_comment = file_columns['column_comments'].tolist()
lens = len(file_column_name)
#11.初始化schema
schema = ""
for j in range(lens):
#12.最后一个数据,结尾不需要加逗号','
if j != lens - 1:
schema = f"{schema}`{file_column_name[j]}` string comment '{file_column_comment[j]}',\n"
else:
schema = f"{schema}`{file_column_name[j]}` string comment '{file_column_comment[j]}'\n"
#12.创建建表语句
sql = \
f"create table if not exists {table_name.iloc[0,0]}(\n" \
f"{schema})comment '{table_name.iloc[0,1]}';\n\n";
#13.写入文件
input.write(sql+'\n')
#14.关闭io
input.close()