稍后再整理,好像我堆积了好多稍后整理的东西
|
表名
表英文名
是否导出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
Email
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:workdoc'
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)
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!