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)