文档转换Oracle的创表语句

前端之家收集整理的这篇文章主要介绍了文档转换Oracle的创表语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

稍后再整理,好像我堆积了好多稍后整理的东西

表名 表英文名 是否导出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:\\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

猜你在找的Oracle相关文章