mysql 自动建表建库 oracle 自动建表

发布时间 2023-03-29 09:19:15作者: vx_guanchaoguo0

mysql 自动化建表建库

  • 表结构
CREATE TABLE `meta_column` (
  `column_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `column_full_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '全名称',
  `column_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '名称',
  `short_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '短名',
  `default_value` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '默认值',
  `part_of_primary_key` int(11) DEFAULT NULL COMMENT '是否为主键的一部分',
  `part_of_unique_index` int(11) DEFAULT NULL COMMENT '是否为唯一索引的一部分',
  `referenced_column` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '引用列',
  `type` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数据类型',
  `ordinal_position` int(11) DEFAULT NULL COMMENT '原始序号',
  `precision` int(11) DEFAULT NULL COMMENT '精度',
  `scale` int(255) DEFAULT NULL COMMENT '比例',
  `nullable` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否可空',
  `remarks` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注',
  `remarks_ext` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注信息(平台添加的)',
  `attribute_map` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '属性map',
  `from_type` int(11) DEFAULT NULL COMMENT '0:表的列 1:视图的列 2:存储过程的列3函数的列',
  `data_state` int(11) DEFAULT NULL COMMENT '0无效 1有效',
  `meta_table_id` int(11) DEFAULT NULL COMMENT '表id或者视图id或者存储过程id',
  `meta_dir_id` int(11) DEFAULT NULL COMMENT '元目录id',
  `meta_db_dir_id` int(11) DEFAULT NULL COMMENT '数据库目录id',
  `proc_column_type` int(11) DEFAULT NULL COMMENT '存储过程的列类型',
  `last_operation` int(11) DEFAULT '0' COMMENT '最后操作: 0 初始状态 1新增,2修改,3删除',
  `last_operation_status` int(11) DEFAULT '0' COMMENT '0:初始状态 1待审核 2审核通过 3审核不通过',
  `column_family` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '所属列族',
  `custom_column_id` int(11) DEFAULT '0' COMMENT '客户录入列的id',
  `unique_column_flag` tinyint(1) unsigned zerofill DEFAULT '0' COMMENT '稽查唯一列标识,1.是,0.否',
  `infoitem_code` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '信息项编码',
  `infoitem_name` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '信息项名称',
  `infoitem_index` int(11) DEFAULT NULL COMMENT '信息项编码自增值',
  PRIMARY KEY (`column_id`) USING BTREE,
  KEY `meta_table_id` (`meta_table_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=529137 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='元数据列信息表';

CREATE TABLE `meta_table` (
  `meta_table_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '表id',
  `table_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '表名称',
  `table_full_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '表全名',
  `table_type` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '表类型',
  `sort_index` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '排序',
  `schema_catalog` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'schema_类',
  `schema_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'schema_名称',
  `attribute_map` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '属性map',
  `remarks` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注',
  `remarks_ext` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注(平台加)',
  `meta_dir_id` int(11) DEFAULT NULL COMMENT '元目录id(表类型的目录)',
  `meta_db_dir_id` int(11) DEFAULT NULL COMMENT '元目录(数据库目录)id',
  `data_source_id` int(11) DEFAULT NULL COMMENT '数据源id',
  `dept_id` int(11) DEFAULT NULL COMMENT '部门id',
  `data_state` int(2) DEFAULT NULL COMMENT '0无效 1有效',
  `table_version` int(11) DEFAULT '0' COMMENT '插入时版本号为1,以后每次修改都加1',
  `last_operation` int(11) DEFAULT NULL COMMENT '最后操作: 0 初始状态 1新增,2修改,3删除',
  `last_operation_status` int(11) DEFAULT '0' COMMENT '0待编目 1待发布 2待业务审批 3待信息中心审批 4业务部门退回 5信息部门退回 6已发布',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `column_familys` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '列族,多个逗号拼接',
  `custom_table_id` int(11) DEFAULT '0' COMMENT '客户录入表的id',
  `unique_column_id` int(11) DEFAULT NULL COMMENT '唯一列',
  `category_id` int(11) DEFAULT NULL COMMENT '分类目录id',
  `apply_user_id` int(11) DEFAULT NULL COMMENT '申请人id',
  `meta_version` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '版本信息',
  `meta_group_id` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分组id',
  `service_table_type` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '武汉新增-业务表类型',
  `temp_migrate_data` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `back_category_id` int(11) DEFAULT NULL,
  `middle_category_id` int(11) DEFAULT NULL,
  `ext_category_json` varchar(512) COLLATE utf8mb4_bin DEFAULT NULL,
  PRIMARY KEY (`meta_table_id`) USING BTREE,
  KEY `idx_unique_column_id` (`unique_column_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=27054 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='元数据表信息表';
CREATE TABLE `adqm_data_source` (
  `data_source_id` int(9) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `ref_id` int(11) DEFAULT NULL COMMENT '关联平台数据源id',
  `org_dept_id` int(11) DEFAULT NULL COMMENT '所属部门',
  `sys_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '系统名称(代码)',
  `duty_person` int(11) DEFAULT NULL COMMENT '责任人',
  `source_name` varchar(200) COLLATE utf8mb4_bin NOT NULL COMMENT '数据源名称',
  `source_type_code` decimal(9,0) NOT NULL COMMENT '数据源类型',
  `database_type` varchar(40) COLLATE utf8mb4_bin NOT NULL COMMENT '数据库类型',
  `host` varchar(23) COLLATE utf8mb4_bin NOT NULL COMMENT '主机ip或主机名',
  `port` decimal(5,0) NOT NULL COMMENT '端口',
  `db_service_name` varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '数据库服务名',
  `user_name` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名',
  `password` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码',
  `db_con_url` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '连接串',
  `description` varchar(240) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '描述',
  `status` decimal(4,0) NOT NULL DEFAULT '1' COMMENT '状态',
  `db_instance_name` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '实例名称',
  `total_rows` decimal(10,0) DEFAULT '0' COMMENT '总记录数',
  `schema_name` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'schema名称',
  `data_state` int(2) DEFAULT '1' COMMENT '有效标识(0:无效,1:有效)',
  PRIMARY KEY (`data_source_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=83 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='数据源表';

组装

  • 建库
def check_database(db, database, type):
    if type == 'MySQL':
        import pymysql
        try:
            mydb = pymysql.connect(
                host=db['host'],
                user=db['user'],
                password=db['pass']
            )
        except Exception as e:
            print(e)

        mycursor = mydb.cursor()
        mycursor.execute("CREATE DATABASE IF NOT EXISTS %s" % database)
    else:
        import cx_Oracle
        dsn = cx_Oracle.makedsn(host='localhost', port=1521, sid='xe')
        with cx_Oracle.connect(user=r'fdm', password='qwe123', dsn=dsn) as connection:
            with connection.cursor() as cursor:
                sql = """select sysdate from dual"""
                for r in cursor.execute(sql):
                    print(r)
  • 建表
def check_table(db, table_name, database, column_mappings):
    #  source_table.table_name
    #  column.target_table_field.default_value
    # column.target_table_field.column_name
    #  column.target_table_field.type
    #  column.target_table_field.nullable
    if type == 'MySQL':
        import pymysql
        try:
            mydb = pymysql.connect(
                host=db['host'],
                user=db['user'],
                password=db['pass']
            )
        except Exception as e:
            print(e)

        mycursor = mydb.cursor()
        columns = ''
        for column in column_mappings:
            if str.lower(column.column_name) == 'id':
                continue
            nullable = 'NOT' if int(column.nullable) > 0 else ''

            type_value = '%s(%d)' % (column.type, column.precision) if str.lower(column.type) not in ['datetime',
                                                                                                      'text'] else column.type
            default_value = column.default_value if column.default_value else ''
            columns += "`%s` %s %s NULL %s,\n" % (
                column.column_name, type_value, nullable, default_value)
        create_table = ("CREATE TABLE IF NOT EXISTS `%s`.`%s`(\n" +
                        "`id` INT(11) NOT NULL AUTO_INCREMENT,\n" +
                        "%s"
                        "PRIMARY KEY (`id`)\n" +
                        ")ENGINE=INNODB DEFAULT CHARSET = utf8;") % (table_name, database, columns)
        mycursor.execute(create_table)
    else:
        import cx_Oracle
        dsn = cx_Oracle.makedsn(host='localhost', port=1521, sid='xe')
        with cx_Oracle.connect(user=r'fdm', password='qwe123', dsn=dsn) as connection:
            with connection.cursor() as cursor:
                columns = []
                for column in column_mappings:
                    type_value = column.type
                    if str.lower(column.type) == 'number':
                        type_value = '%s(%d,0)' % (column.type, column.precision)
                    elif str.lower(column.type) == 'datetime':
                        type_value = '%s' % column.type
                    else:
                        type_value = '%s(%d)' % (column.type, column.precision)

                    column_name = column.column_name if column.column_name else ''
                    type_value = type_value if type_value else ''
                    default_value = column.default_value if column.default_value else ''
                    columns.append("%s %s  %s,\n" % (
                        str(column_name), str(type_value), str(default_value)))
                column_join = ",".join(columns)

                exists = "SELECT * FROM user_tables WHERE TABLE_NAME = '%s'" % table_name
                rows = cursor.execute(exists).fetchall()
                if len(rows) < 1:
                    stmt = ("CREATE TABLE %s( %s )" % (table_name, column_join))
                    for r in cursor.execute(stmt):
                        print(r)