python脚本自动生成mysql建表语句

本文介绍了一种使用Python脚本自动生成MySQL数据库表结构的方法,通过读取Excel文件中的表设计,转换数据类型并生成相应的建表SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动生成mysql建表语句

平时在设计完表结构后,还得写建表语句,其实可以让脚本来完成这样重复的工作,python代码如下

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

def convert_type(data_type):
    """Normalize MySQL `data_type`"""
    if 'CHAR' == data_type:
        return 'varchar'
    elif 'CLNT' == data_type:
        return 'varchar'
    elif 'NUMC' == data_type:
        return 'numeric'
    elif 'DATS' == data_type:
        return 'timestamp'
    elif 'QUAN' == data_type:
        return 'varchar'
    elif 'CUKY' == data_type:
        return 'varchar'
    elif 'CURR' == data_type:
        return 'varchar'
    elif 'DEC' == data_type:
        return 'varchar'
    elif 'INT4' == data_type:
        return 'varchar'
    elif 'TIMS' == data_type:
        return 'varchar'
    elif 'string' == data_type:
        return 'varchar'

    else:
        return data_type

# 在mysql中创建表
def mysql_create(fields):
    stg_table_name = 'db.' + fields[0]['table_name']
    columns = []
    primary_key = []
    for field in fields:
        if field['primary_key'] == 'Y':
            primary_key.append(field['column_name'])
        table_column = field['column_name'] + '          ' + field['type'] + '          ' + 'COMMENT ' + "'" + field['column_exp'] + "'" + ',\n'
        #print(table_column)
        columns.append(table_column)
    #print(columns)
    stg_create_columns = ''.join(
        columns)[:-2]
    # print(stg_create_columns)
    create_stg_sql = "drop table if exists {};\ncreate table {} (\n{});".format(
    stg_table_name,stg_table_name, stg_create_columns)
    # 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': table_names[table_name].lower(),
                        'column_exp': res[0],
                        'column_name': res[1].lower(),
                        'type': convert_type(res[2]).upper(),
                        'primary_key': res[3],
                    }
                    fields.append(desc)
                #print(fields)
                result_sql += mysql_create(fields) + '\n\n'
            with open(path+'\\'+filename[:-5]+'.sql', "w", encoding='utf-8') as f:
                f.write(str(result_sql))
                f.close()

测试使用的表结构设计为

https://download.youkuaiyun.com/download/csdnshenjiaye/12171672

将python脚本和设计表的excel放在同一目录下即可,excel中sheet名就是表名,生成的建表语句保存在了脚本所在目录。

此脚本只是实现了基本功能,脚本还可以扩展,支持更多可配置功能,比如配置库名传参,支持不同的数据库等,欢迎大家补充!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值