一、代码效果
废话不多说,先上代码展示效果,然后讲解
1.1代码
import pandas as pd
data = pd.read_excel('D:/示例1.xlsx')
data = data.fillna('NULL')
with open('./data_model.sql', 'w', encoding='utf8') as f:
table_name = ''
for i, j in data.iterrows():
column_line = '`'+j.column_name+'`'+' '+j.data_type + ' '+j.default+' COMMENT \''+j.comment+'\'\n'
if j.table_name == table_name:
f.write(' ,'+column_line)
else:
if table_name != '':
f.write(');\n\n')
table_name = j.table_name
table_comment = j.table_comment
f.writelines(['DROP TABLE IF EXISTS '+j.table_name+';'+' \n '+'CREATE TABLE '+j.table_name+' (\n'
, ' '+'PRIMARY KEY (`record_id`)'+' \n '+',' + column_line])
f.write(');')
2.2excel整理好的字段元数据信息
2.3结果展示
DROP TABLE IF EXISTS user_login;
CREATE TABLE user_login (
PRIMARY KEY (`record_id`)
,`record_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '记录编号'
,`plat_id ` varchar(100) DEFAULT NULL COMMENT '平台id'
,`server_id ` int(11) DEFAULT NULL COMMENT '区服id'
,`channel_id ` varchar(100) DEFAULT NULL COMMENT '渠道'
,`user_id ` varchar(100) DEFAULT NULL COMMENT '用户ID'
,`role_id ` varchar(100) DEFAULT NULL COMMENT '角色ID'
,`role_name ` varchar(100) DEFAULT NULL COMMENT '角色名称'
,`client_ip ` varchar(100) DEFAULT NULL COMMENT '客户端IP'
,`event_time ` int(11) DEFAULT NULL COMMENT '事件时间'
,`op_type ` varchar(100) DEFAULT NULL COMMENT '操作类型(1:登录-1登出)'
,`online_time ` int(11) DEFAULT NULL COMMENT '在线时长(s)'
,`operating_system` varchar(100) DEFAULT NULL COMMENT '操作系统名称'
,`operating_version` varchar(100) DEFAULT NULL COMMENT '操作系统版本'
,`device_brand ` varchar(100) DEFAULT NULL COMMENT '设备型号'
,`device_type ` varchar(100) DEFAULT NULL COMMENT '设备品牌'
);
二、代码讲解
#引入pandas库
import pandas as pd
#Excel文件读取到pandas DataFrame中,支持本地文件系统或URL的’xls’和’xlsx’文件扩展名
data = pd.read_excel('D:/示例1.xlsx')
#数据中的缺失值用空值
data = data.fillna('NULL')
#文件的写操作
#w: 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
with open('./data_model.sql', 'w', encoding='utf8') as f:
f.write(');')
#for循环,iterrows():把 DataFrame 里的行当作 (index, Series)对进行迭代 ,拼接字符串,写入文件
for i, j in data.iterrows():
column_line = '`'+j.column_name+'`'+' '+j.data_type + ' '+j.default+' COMMENT \''+j.comment+'\'\n'
if j.table_name == table_name:
f.write(' ,'+column_line)
else:
if table_name != '':
f.write(');\n\n')
table_name = j.table_name
f.writelines(['DROP TABLE IF EXISTS '+j.table_name+';'+' \n '+'CREATE TABLE '+j.table_name+' (\n'
, ' '+'PRIMARY KEY (`record_id`)'+' \n '+',' + column_line])
f.write(');')