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)

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

相关推荐
Nyarlathotep01131 小时前
SQL的事务控制
sql·mysql
进击的丸子2 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
用户86178277365182 小时前
MySQL 8.0从库宕机排查实录:中继日志膨胀引发的连锁故障复盘
mysql
NineData18 小时前
NineData智能数据管理平台新功能发布|2026年1-2月
数据库·sql·数据分析
IvorySQL19 小时前
双星闪耀温哥华:IvorySQL 社区两项议题入选 PGConf.dev 2026
数据库·postgresql·开源
ma_king21 小时前
入门 java 和 数据库
java·数据库·后端
jiayou641 天前
KingbaseES 实战:审计追踪配置与运维实践
数据库
随风飘的云1 天前
mysql的innodb引擎对可重复读做了那些优化,可以避免幻读
mysql
NineData2 天前
NineData 迁移评估功能正式上线
数据库·dba
NineData2 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算