python-Excel数据模型文档转为MySQL数据库建表语句(需要连接数据库)-工作小记

将指定Excel文档转为create table 建表语句。该脚本适用于单一且简单的建表语句

呈现效果

代码

python 复制代码
# -*- coding:utf-8 -*-
# @Time : 2023/8/2 17:50
# @Author: 水兵没月
# @File : excel_2_mysql建表语句.py
import re

import pandas as pd
import mysql.connector

db = '库名'

mydb = mysql.connector.connect(host="连接IP", user="用户名", password="密码",port='端口',database=db)
def con_mysql():
    mycursor = mydb.cursor()
    return mycursor
 
def clo_mysql():
    mydb.close()


def read_xlsx():
    df = pd.read_excel(r'E:\下载\XXXXXX.xlsx')
    mylist = df.values.tolist()
    return mylist

def creat_info(mylist):
    table = '表名'
    info = ''
    CHARSET = 'utf8mb4'
    COMMENT = '中文表名-注释'
    otherlist = []
    for ml in mylist:
        ml = [_ if not isinstance(_, float) else _ if re.findall(r'\d+',str(_)) else ''  for _ in ml]
        print(ml)
        table = ml[0]   # 表名
        COMMENT = ml[1] # '中文表名-注释'
        ziduan = ml[3]  # 字段名
        ziduan_zh = ml[4]   # 注释
        leixing = ml[5] # 类型
        changdu = int(ml[6]) if ml[6] else '' # 长度
        leixing_changdu = leixing if not changdu else leixing+"("+str(changdu)+")"
        iskong = 'DEFAULT NULL' if ml[-2] == 'Y' or ml[-2] == '' else 'NOT NULL DEFAULT ""'
        iskong = "NOT NULL DEFAULT"+' 1' if ziduan.upper() in ['ISVALID','DATASTATUS','DATASTATE'] else iskong
        iskong = "NOT NULL DEFAULT CURRENT_TIMESTAMP" if ziduan.upper() in ['CREATTIME'] else iskong
        iskong = "NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" if ziduan.upper() in ['MODIFYTIME','MODIFYUPDATETIME'] else iskong
        iskong = "NOT NULL AUTO_INCREMENT" if ziduan.upper() in ['ID'] else iskong

        otherlist.append({ziduan:ml[-3]})

        info += '`'+ziduan+'`'+' '+leixing_changdu+' '+iskong+' COMMENT '+ "'"+ziduan_zh+"'" +','

    for ol_dict in otherlist:
        for k, v in ol_dict.items():
            if 'PRI' == v:
                info += "PRIMARY KEY (`{}`),".format(k)
            elif 'UNI' == v:
                info += "UNIQUE KEY `{}` (`{}`),".format(k,k)
            elif 'MUL' == v:
                info +="KEY `{}` (`{}`) USING BTREE,".format(k,k)

    info = info.strip(',')
    creat_table_seq = """
    CREATE TABLE `{}` (
    {}
    )
    ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET={} COMMENT='{}';
    """.format(table, info, CHARSET, COMMENT)
    return creat_table_seq


def creat_sel(sel):
    mycursor = con_mysql()
    mycursor.execute(sel)
    mydb.commit()
if __name__ == '__main__':
    mylist = read_xlsx()
    sel = creat_info(mylist)
    creat_sel(sel)

仅作为笔记记录,如有问题请各位大佬来指导

相关推荐
jianghua0014 小时前
Django视图与URLs路由详解
数据库·django·sqlite
那我掉的头发算什么4 小时前
【Mybatis】Mybatis-plus使用介绍
服务器·数据库·后端·spring·mybatis
倔强的石头1064 小时前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险
数据库·kingbase
_Johnny_4 小时前
ETCD 配额/空间告警模拟脚本
数据库·chrome·etcd
静听山水4 小时前
StarRocks查询加速
数据库
静听山水5 小时前
StarRocks高级特性
数据库
范纹杉想快点毕业5 小时前
从单片机基础到程序框架:全方位技术深度解析
数据库·mongodb
晚风_END5 小时前
Linux|操作系统|elasticdump的二进制方式部署
运维·服务器·开发语言·数据库·jenkins·数据库开发·数据库架构
devmoon5 小时前
Polkadot SDK 自定义 Pallet Benchmark 指南:生成并接入 Weight
开发语言·网络·数据库·web3·区块链·波卡
程序员敲代码吗5 小时前
在Excel中快速进行精确数据查找的方法
excel