稍后再整理,好像我堆积了好多稍后整理的东西
表名 | 表英文名 | 是否导出sql | 版本 | ||||||
用户表 | ZCYC_Account | 1 | 1 | ||||||
序号 | 英文名 | 类型 | 长度 | 默认值 | 索引 | 是否空 | 是否主键 | 说明 | 备注 |
1 | UserID | number | 10 | 1 | NO | 1 | 用户编号 | ||
2 | UserName | varchar2 | 50 | '' | NO | 用户登录名 | |||
3 | UserPassword | varchar2 | 256 | '' | NO | 用户密码 | |||
4 | Mobile | varchar2 | 50 | '' | NO | 用户手机号 | |||
5 | NickName | varchar2 | 50 | '' | 用户昵称 | ||||
6 | RealName | varchar2 | 50 | '' | 用户姓名 | ||||
7 | varchar2 | 50 | '' | 用户电子邮件 | |||||
8 | HighPsaaword | varchar2 | 256 | '' | 二次密码 | ||||
9 | TempPassword | varchar2 | 256 | '' | 临时密码用于找回密码 | ||||
10 | TempPassOverTime | date | sysdate | NO | 临时密码失效时间 | ||||
11 | RegistTime | date | sysdate | NO | 注册时间 | ||||
12 | LoginTimes | number | 10 | 0 | 登录次数 | ||||
13 | LastLoginTime | date | sysdate | NO | 最后登录时间 | ||||
14 | EmployeeID | varchar2 | 50 | '' | NO | 关联职员编号 | |||
15 | ProjectID | varchar2 | 50 | '' | NO | 关联项目编号 | |||
16 | IsForbid | number | 3 | 0 | NO | 帐号是否禁用 | 0未禁用1禁用 | ||
17 | AddTime | timestamp | systimestamp | NO | 创建时间 | ||||
18 | AddUser | varchar2 | 50 | '' | NO | 创建人 | |||
19 | ModifyTime | timestamp | systimestamp | NO | 最后修改时间 | ||||
20 | ModifUser | varchar2 | 50 | '' | NO | 最后修改人 | |||
21 | IsDel | number | 3 | 0 | NO | 是否删除 |
#!/usr/bin/env python # -*- coding: utf-8 -*- # Created by weilai on 2017/07/05 """exceltosql.py -- Excel数据库设计文档转换sql表创建sql工具 核心""" """ 文件 外壳模板(含备注,准备语句,生成表,备注,默认值,索引) 主程序 特定实现(比如mssql/MysqL) 备注模板 创建语句模板-外壳模板,单向模板 备注语句模板-单项模板 默认值模板 - 单向模板 """ import os from exceltosql_oraclesql_plugin import exceltosql_oraclesql_plugin,field_item import xlrd max_sheets = 1 def load_file(file_path): """读取excel文件""" try: data = xlrd.open_workbook(file_path) return data except Exception as e: print(e) def exceltosql_main(file_path): """主程序""" if not os.path.exists(file_path): print('路径上没有文件') data = load_file(file_path) sheet_list = data.sheets() sheets_len = len(sheet_list) db_info = sheet_list[0] db_name = db_info.row_values(1)[1] # 改sheets_len 读取到指定sheets for ti in range(1,sheets_len): table = sheet_list[ti] is_export = table.row_values(1)[2] # 检查是否导出sql if is_export == 0: continue table_name = table.row_values(1)[1] table_remark = table.row_values(1)[0] maker = exceltosql_oraclesql_plugin(db_name,db_info,table_name,table_remark,'ZCYC_BIM_DATA','ZCYC_BIM_INDEX') item_result = '' def_val_result = '' remark_result = '' pk_result = '' sql_remark_result = '' for i in range(4,table.nrows): # load_item_template(table_name,table.row_values(i)) maker.make_create_sql_item(table.row_values(i)) # maker.make_table_remark() maker.make_create_sql() maker.make_all_sql() file_path = file_name_template.format(db_name=db_name,table_name=table_name) with open(path + file_path,'w') as f: f.writelines(maker.last_full_sql) # print(maker.last_full_sql) print('成功生成'+file_path+'创建表sql脚本...') path = 'F:\\work\\doc\\' db_excel_file = '筑成源创Bim数据库设计_用户职员管理.v0.1.xlsx' # 生成sql文件名的模板 file_name_template = '{db_name}.{table_name}.CreateScript.sql' exceltosql_main(path + db_excel_file)
#!/usr/bin/env python # -*- coding: utf-8 -*- # Created by weilai on 2017/07/05 """exceltosql.py -- Excel数据库设计文档转换sql表创建sql工具 oraclesql 插件""" """ 文件 外壳模板(含备注,准备语句,生成表,备注,默认值,索引) 主程序 特定实现(比如mssql/MysqL) 备注模板 创建语句模板-外壳模板,单向模板 备注语句模板-单项模板 默认值模板 - 单向模板 """ import datetime class field_item: f_name = '' f_type = '' f_len = '' default_value = '' is_null = '' is_index = '' is_pk = '' remark = '' class exceltosql_oraclesql_plugin: """""" separator = ',' new_line = '\n' tablespace = '' index_tablespace = '' table_name = '' db_name = '' table_remark = '' db_remark = '' remark_template = '' create_sql_template = '' create_sql_item_template = '' remark_item_template = '' default_value_template = '' shell_template = """ {sql_remark} {create_sql} {remark_sql} {pk_sql} {index_sql} """ # 创表语句单项模板 create_sql_template = """ //--建表 CREATE TABLE {table_name} ({create_sql_body}) tablespace {tablespace} storage ( initial 64K minextents 1 maxextents unlimited ); """ pk_template = """alter table {table_name} add constraint {pk_name} primary key ({pk_field_name}) using index tablespace {index_tablespace} storage ( initial 64K minextents 1 maxextents unlimited );""" index_template = """create index {index_name} on {table_name} ({index_fields}) tablespace {index_tablespace} storage ( initial 64K minextents 1 maxextents unlimited );""" item_template = """{field_name} {field_type} {def_val} {is_null} {separator}\n""" field_type_template_char = '{f_type}({f_len})' field_type_template_int = '{f_type}' field_type_template_decimal = '{f_type}({f_len})' field_type_template_money = '{f_type}' field_type_template_def = '{f_type}' # 备注信息写入的模板 remark_template = """comment on column {table_name}.{field_name} is '{field_remark}'; """ # 默认值写入的模板 def_val_template = """default {default_value} """ # sql脚本 头部备注模板 sql_remark_template = """/****** [{table_remark}] DB: [{db_name}] Object: Table [dbo].[{table_name}] Script Date: {date_time} ******/""" item_template_result = '' create_template_result = '' pk_template_result = '' remark_template_result = '' def_val_template_result = '' table_remark_result = '' pk_field_index_template_result = '' index_template_result = '' last_full_sql = '' def __init__(self,dbname,dbremark,tablename,tableremark,tablespace,index_tablespace): self.db_name = dbname self.table_name = tablename self.table_remark = tableremark self.db_remark = dbremark self.tablespace = tablespace self.index_tablespace = index_tablespace def remark_filter(self,remark_str): """备注信息过滤,去除换行空格等无用内容""" return remark_str.replace(' ','').replace('\r','').replace('\n','').replace('\t','') def load_field_item(self,fields): f_name = fields[1] f_type = fields[2] f_len = fields[3] default_value = fields[4] is_index = fields[5] is_null = fields[6] is_pk = fields[7] remark = self.remark_filter(fields[8] + '|' + fields[9]) return f_name,f_type,f_len,default_value,is_index,is_null,is_pk,remark def make_create_sql_item(self,fields): """将每个数据项 转换组合到 主模板块中""" f_name,remark = self.load_field_item(fields) # field_type = '' if f_type == 'varchar' or f_type == 'nvarchar' or f_type == 'varchar2' or f_type == 'nvarchar2': if f_len == 'MAX' or f_len == 'max': field_type = self.field_type_template_char.format(f_type=f_type,f_len=f_len) else: field_type = self.field_type_template_char.format(f_type=f_type,f_len=int(f_len)) elif f_type == 'number' and f_len != '': field_type = self.field_type_template_decimal.format(f_type=f_type,f_len=f_len) # 有长度用给定长度 elif f_type == 'number' and f_len == '': field_type = self.field_type_template_decimal.format(f_type=f_type,f_len=10) # 无长度时默认10位,亿 elif f_type == 'int' or f_type == 'tinyint' or f_type == 'bigint': field_type = self.field_type_template_int.format(f_type=f_type) elif f_type == 'decimal': field_type = self.field_type_template_decimal.format(f_type=f_type,f_len=f_len) elif f_type == 'money': field_type = self.field_type_template_money.format(f_type=f_type) elif f_type == 'float': field_type = self.field_type_template_money.format(f_type=f_type) else: field_type = self.field_type_template_def.format(f_type=f_type) null_template = '' if is_null == 'NO' or is_null == 1 or is_null == '1': null_template = 'NOT NULL' else: null_template = 'NULL' # 字段项组合结果 def_value = self.make_defult_value_sql_item(fields) self.item_template_result += self.item_template.format(field_name=f_name,field_type=field_type,def_val=def_value,is_null=null_template,separator=self.separator) self.make_defult_value_sql_item(fields) self.make_remark_sql_item(fields) self.make_pk_sql(fields) return self.item_template_result,self.def_val_template_result,self.remark_template_result,self.pk_template_result def make_remark_sql_item(self,fields): f_name,remark = self.load_field_item(fields) self.remark_template_result += self.remark_template.format(table_name=self.table_name,field_name=f_name,field_remark=remark) def make_defult_value_sql_item(self,remark = self.load_field_item(fields) if default_value != '': if f_type == 'number': return self.def_val_template.format(default_value=default_value) elif f_type == 'date' or f_type == 'timestamp': if default_value == 'sysdate' or default_value == 'systimestamp': return self.def_val_template.format(default_value=default_value) else: return self.def_val_template.format(default_value=default_value) else: return self.def_val_template.format(default_value=default_value) def make_index(self,remark = self.load_field_item(fields) def make_table_remark(self): d1 = datetime.datetime.now() now_time = d1.strftime("%Y-%m-%d %H:%M:%S.%f") self.table_remark_result = self.sql_remark_template.format(table_remark=self.table_remark,db_name=self.db_name,table_name=self.table_name,date_time=now_time) def make_index_sql(self,fields): """暂无用处""" f_name,remark = self.load_field_item(fields) def make_pk_sql(self,remark = self.load_field_item(fields) if is_pk == 1: self.pk_template_result = self.pk_template.format(tablespace=self.tablespace,key_field_name=f_name,pk_name=self.table_name+'_'+f_name+'_pk',pk_field_name=f_name,index_tablespace=self.index_tablespace) def make_create_sql(self): self.create_template_result = self.create_sql_template.format(db_name=self.db_name,create_sql_body=self.item_template_result[:-2],pk_template=self.pk_template_result,tablespace=self.tablespace) def make_all_sql(self): self.last_full_sql = self.shell_template.format(sql_remark=self.table_remark_result,create_sql=self.create_template_result,remark_sql=self.remark_template_result,pk_sql=self.pk_template_result,index_sql=self.index_template_result)原文链接:https://www.f2er.com/oracle/208159.html