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)

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

相关推荐
IvorySQL14 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔14 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用14 小时前
Spring对IoC的实现
数据库·spring
hz5678916 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC17 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday17 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码17 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
Yyyyyy~17 小时前
[ Mysql ] 库的操作
mysql
小米里的大麦17 小时前
16 MySQL 事务
数据库·mysql
西柚小萌新17 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库