栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python自动建表脚本

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python自动建表脚本

Python自动建表脚本

功能实现:
· 字段类型转换
· 主键和联合主键
· 索引
· 是否为空
· 单列索引

# -*- coding=utf-8 -*-
#coding=utf-8
import xlrd,os

def convert_type(data_type):
    """Normalize MySQL `data_type`"""
    if 'CHAR' == data_type or 'CLNT' == data_type or 'QUAN' == data_type or 'CUKY' == data_type or 'CURR' == data_type or 'DEC' == data_type or 'INT4' == data_type or 'TIMS' == data_type or 'string' == data_type or 'String' == data_type:
        return 'varchar'
    elif 'NUMC' == data_type:
        return 'numeric'
    elif 'DATS' == data_type:
        return 'timestamp'
    else:
        return data_type
 
# 在mysql中创建表
def mysql_create(fields):
    stg_table_name = fields[0]['table_name']
    columns = []
    primary_key = []
    table_name_cn =  fields[1]['table_name_cn']
    for field in fields:
        table_column_index = ""
        table_column = ""
        if field['primary_key'] == 'Y':
            primary_key.append(field['column_name'])
        if field['column_name'] == 'id':
             table_column = '`' + field['column_name'] + '`    ' + field['type'] + '    NOT NULL AUTO_INCREMENT    ' + 'COMMENT ' + "'" + field['column_exp'] + "'" + ',n'
        else:
            if field['null_key'] == 'N':
            # if field['primary_key'] == 'Y':
            #     primary_key.append(field['column_name'])
            # print(primary_key)
                if  field['default_value'] is None or field['default_value'] == '':
                    table_column = '`' + field['column_name'] + '`    ' + field['type'] + '    NOT NULL    ' + 'COMMENT ' + "'" + field['column_exp'] + "'" + ',n'
                else :
                    table_column = '`' + field['column_name'] + '`    ' + field['type'] + '    NOT NULL DEFAULT "'+ str(field['default_value']) +'"    ' + 'COMMENT ' + "'" + field['column_exp'] + "'" + ',n'
                    print(field['default_value'])
            else:
                table_column = '`' + field['column_name'] + '`    ' + field['type'] + '  DEFAULT NULL  ' + 'COMMENT ' + "'" + field['column_exp'] + "'" + ',n'
        if field['index_key'] == 'Y':
            table_column_index = 'KEY `idx_dim_' + stg_table_name.replace('.','_') + '_' + field['column_name'] + '` (`' + field['column_name'] + '`) USING BTREE' + ',n'        
        # print(stg_table_name)
        if table_column_index is None :
            columns.append(table_column)
        else:
            columns.append(table_column)
            columns.append(table_column_index)
    primary_key_str = "PRIMARY KEY ("
    for item in primary_key:
        primary_key_str =primary_key_str + '`' + item + '`, '     
    # print(primary_key_str)
    columns.append(primary_key_str)
    stg_create_columns = ''.join(
        columns)[:-2]
    # print(stg_create_columns)
    create_stg_sql = "drop table if exists {};ncreate table {} (n{})) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='{}' ;".format(
    stg_table_name,stg_table_name, stg_create_columns,table_name_cn)
    # print(primary_key)
    print(create_stg_sql)
    return create_stg_sql
 
 
# print(os.getcwd())
par_path = os.getcwd()
paths = [par_path+'\']
print('---------------paths-------------------')
print(paths)
for path in paths:
    for filename in os.listdir(path):
        print(filename)
        if filename.endswith(".xlsx") or filename.endswith(".xls"):
            result_sql = ''
            print(path)
            print(filename)
            print(path + filename)
            worksheet = xlrd.open_workbook(path + filename)
            table_names = worksheet.sheet_names()
            for table_name in range(len(table_names)):
                sheet = worksheet.sheet_by_index(table_name)
                nrows = sheet.nrows
                fields = []
                for i in range(1,nrows):
                    res = sheet.row_values(i)
                    desc = {
                        'table_name_cn': res[0],
                        'table_name': table_names[table_name].lower(),
                        'column_exp': res[1],
                        'column_name': res[2].lower(),
                        'type': convert_type(res[3]).upper(),
                        'primary_key': res[4],
                        'null_key': res[5],
                        'index_key': res[6],
                        'default_value': res[7],
                    }
                    fields.append(desc)
                #print(fields)
                result_sql += mysql_create(fields) + 'nn'
            
            with open(path+'\'+filename[:-5]+'.sql', "w", encoding='utf-8') as f:
                f.write(str(result_sql))

在同一目录下创建excel表,表结构如下图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/580835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号