如何快速的将Excel定义的表结构变成MySQL的建表语句

如何快速的将Excel定义的表结构变成MySQL的建表语句

最近需求有点多啊,做一个小需求就有一堆表结构,一个一个实行CV大法,实在太伤身体了,有没有能够快速便捷的方法将一大堆Excel表转换成MySQL的表结构建表语句呢,网上张罗找了半天发现毛也没有,找到了也没有用,也就是换个地方CV而已,手敲键盘的数量依旧没有减少,怎么办?只能自己手敲一个工具了,将20张Excel定义的表转换成SQL建表语句了。

此处我的技术选型为python,别问为什么,问就是我只会python,其它的我啥也不会。

下面使在Excel中定义好的表结构,其中第一行最后一列tb_user为当前表结构的名称。

序号字段名称字段类型描述是否为空索引类型tb_user
1idint主键NOPRI
2usernamevarchar(20)用户名NO
3passwordvarchar(20)密码NO
4ageint年龄NO
5genderint性别:0-女 1-男NO
6birthdaydate生日NO
7create_timedatetime创建时间NO
8creatorvarchar(20)创建人NO
9update_timedatetime修改时间NO
10updatervarchar(20)修改人NO
11remarkdatetime备注NO

为了方便编程,我将这些表结构从Excel中复制到了CSV文件,新建一个user.csv文件,放到当前pycharm工程目录下,其中内容如下,在CV的时候,需要每个数据中间的空格替换成,。别问为什么,问就是方便我写的程序好识别。

序号,字段名称,字段类型,描述,是否为空,索引类型,tb_user
1,id,int,主键,NO,PRI
2,username,varchar(20),用户名,NO
3,password,varchar(20),密码,NO
4,age,int,年龄,NO
5,gender,int,性别:0-女 1-男,NO
6,birthday,date,生日,NO
7,create_time,datetime,创建时间 ,NO
8,creator,varchar(20),创建人,NO
9,update_time,datetime,修改时间,NO
10,updater,varchar(20),修改人,NO
11,remark,datetime,备注,NO

接下来就是将这个文件在程序中修改一下,将这个self.source_table_name=user修改一下就可以了,只要文件名,不要后缀。

import csv
from datetime import datetime


class CreateTable:

    def __init__(self):
        self.source_table_name = "user"
        self.csv_post_fix = '.csv'
        self.sql_post_fix = '.sql'
        self.table_name_prefix = 'create_'

    def read_csv_standard(self, file_path):
        data = []
        with open(file_path, encoding="utf-8", mode='r') as file:
            reader = csv.reader(file)
            for row in reader:
                data.append(row)
        return data

    def handle(self, rows):
        tables = []
        last_index = 0
        for index, row in enumerate(rows):
            if len(row) == 0:
                table = rows[last_index:index]
                tables.append(table)
                last_index = index + 1
                # print(table)
            elif index == (len(rows) - 1):
                table = rows[last_index:index]
                tables.append(table)
                last_index = index + 1
                # print(table)
        return tables

    def create_table_sql(self, table_rows):
        table_sql = ""
        id_col_sql = "`{}` {} NOT NULL AUTO_INCREMENT COMMENT '{}'"
        str_col_sql = "`{}` {} DEFAULT NULL COMMENT '{}'"
        time_col_sql = "`{}` {}  DEFAULT current_timestamp() COMMENT '{}'"
        update_time_col_sql = "`{}` {}  DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '{}'"
        last_sql = '\tPRIMARY KEY (`id`) \n) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;'
        for index, table_row in enumerate(table_rows):
            current_sql = ""
            # print(table_row)
            if index == 0:
                current_sql += "DROP TABLE IF EXISTS {};\n".format(table_row[-1])
                current_sql += "CREATE TABLE `{}` (".format(table_row[-1])
                table_sql += current_sql + "\n"
                continue
            if table_row[1] == 'id':
                current_sql = id_col_sql.format(table_row[1], table_row[2], table_row[3])
            elif 'update_time' in table_row[1]:
                current_sql = update_time_col_sql.format(table_row[1], table_row[2], table_row[3])
            elif 'time' in table_row[1]:
                current_sql = time_col_sql.format(table_row[1], table_row[2], table_row[3])
            else:
                current_sql = str_col_sql.format(table_row[1], table_row[2], table_row[3])
            table_sql += "\t" + current_sql + ",\n"
        table_sql += last_sql + "\n\n"
        return table_sql

    def do_work(self):
        date = str(datetime.now().strftime('%Y-%m-%d'))
        with open(self.table_name_prefix + self.source_table_name + "_" + date + self.csv_post_fix, "w",
                  encoding="utf-8") as f:
            rows = self.read_csv_standard(self.source_table_name + self.csv_post_fix)
            tables = self.handle(rows)
            for table in tables:
                table_sql = self.create_table_sql(table)
                print(table_sql)
                f.write(table_sql)


if __name__ == '__main__':
    createTable = CreateTable()
    createTable.do_work()

整完了上面的步骤之后,就可以直接运行输出建表语句了,此时工程目录会多一个create_user_2024-05-30.csv文件,下面为建表语句。

DROP TABLE IF EXISTS tb_user;
CREATE TABLE `tb_user` (
	`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
	`username` varchar(20) DEFAULT NULL COMMENT '用户名',
	`password` varchar(20) DEFAULT NULL COMMENT '密码',
	`age` int DEFAULT NULL COMMENT '年龄',
	`gender` int DEFAULT NULL COMMENT '性别:0-女 1-男',
	`birthday` date DEFAULT NULL COMMENT '生日',
	`create_time` datetime  DEFAULT current_timestamp() COMMENT '创建时间 ',
	`creator` varchar(20) DEFAULT NULL COMMENT '创建人',
	`update_time` datetime  DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '修改时间',
	`updater` varchar(20) DEFAULT NULL COMMENT '修改人',
	PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

将这个文件拖入到navicat中一键运行,不出问题的话麦克阿瑟表示非常nice!!!下面为运行结果

image-20240530133031039

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/664480.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索多模态MR图像的脑肿瘤分割任务结构| 文献速递-深度学习肿瘤自动分割

Title 题目 Exploring Task Structure for Brain Tumor Segmentation From Multi Modality MR Images 探索多模态MR图像的脑肿瘤分割任务结构 01 文献速递介绍 脑肿瘤分割旨在从多模态磁共振(MR)序列中自动分割肿瘤区域,这些序列由先进的…

html中 table的 colspan和rowspan

Colspan 单元格跨越多列; Rowspan 单元格跨越多行 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> </head> <body><h4>单元格跨两列:</h4> <table border"1"&…

Linux:subshell(子shell)和childprocess(子进程)

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 一、预备知识 在进行这个话题之前&#xff0c;首先要了解Linux系统中一个进程是如何创建的&#xff0c;当一个命令被执行时&#xff0c;首先会在当前进程创建一个子进程…

Python 将Word、Excel、PDF、PPT文档转为OFD文档

OFD&#xff08;Open Fixed-layout Document &#xff09;是我国自主制定的一种开放版式文件格式标准。OFD文档具有不易被篡改、格式独立、版式固定等特点&#xff0c;目前常用于政府公文、金融、电子发票等领域。 如果想要通过Python将Office文档&#xff08;如Word、Excel或…

02-CSS3基本样式

目录 1. CSS3简介 1.1 CSS3的兼容情况 1.2 优雅降级和渐进增强的开发思想 2. 新增选择器 2.1 选择相邻兄弟 2.2 匹配选择器 2.3 属性选择器(重点) 2.4 结构性伪类选择器&#xff08;重点&#xff09; 2.4.1 整体结构类型 2.4.2 标签结构类型 2.4.3 指定子元素的序号&…

机器人系统ros2-开发学习实践16-RViz 用户指南

RViz 是 ROS&#xff08;Robot Operating System&#xff09;中的一个强大的 3D 可视化工具&#xff0c;用于可视化机器人模型、传感器数据、路径规划等。以下是RViz用户指南&#xff0c;帮助你了解如何使用RViz来进行机器人开发和调试。 启动可视化工具 ros2 run rviz2 rviz2…

C++ day2 练习

思维导图 自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #inclu…

中间件复习之-消息队列

消息队列在分布式架构的作用 消息队列&#xff1a;在消息的传输过程中保存消息的容器&#xff0c;生产者和消费者不直接通讯&#xff0c;依靠队列保证消息的可靠性&#xff0c;避免了系统间的相互影响。 主要作用&#xff1a; 业务解耦异步调用流量削峰 业务解耦 将模块间的…

go 针对 time类型字段,前端查询,后端返回数据格式为UTC时间

测试代码 package mainimport ("context""log""net/http""time""github.com/gin-gonic/gin""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/bson/primitive""go.mongodb.org/m…

微信、支付宝新规:单笔交易超过3000元将受抽查!风控更为严格!

就在近段时间&#xff0c;网上出现了大量的传言&#xff0c;5月起微信、支付宝新规&#xff0c;单笔交易金额超过3000元就会面临抽查的风险&#xff1f;这一言论引起不少的恐慌&#xff0c;纷纷表示出抵触的心理。 为了有效打击这些不法行为&#xff0c;维护金融市场的健康稳定…

计算机组成原理·海明编码及其实验

前言&#xff1a;海明编码这一块在刚开始的时候没有弄懂&#xff0c;后面通过做实验、复习慢慢摸清了门道。在学习计算机组成原理的过程中&#xff0c;实验实践是很重要的&#xff0c;它会让你去搞清楚事情背后的原理&#xff0c;逼着你学会你没听懂的东西。这篇文章会从海明码…

【UnityShader入门精要学习笔记】第十六章 Unity中的渲染优化技术 (上)

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 移动平台上…

一站式链路追踪:阿里云的端到端解决方案

作者&#xff1a;涯海 炎炎夏日&#xff0c;当你打开外卖 APP 购买奶茶却发现下单失败&#xff1b;五一佳节&#xff0c;当你自驾游途中发现导航响应缓慢&#xff0c;频繁错过路口&#xff1b;深更半夜&#xff0c;当你辅导孩子功课&#xff0c;却发现 GPT 应用迟迟无法应答。…

使用画图工具修改图片文字

方法思路&#xff1a; 使用背景色将需要修改的文字覆盖&#xff0c;然后在原来的地方加入修改后的字。 第一步&#xff1a; 选中图片后右键&#xff0c;选择“编辑”&#xff08;默认会使用画图工具打开&#xff09; 第二步&#xff1a; 选取颜色选取器&#xff0c;如下图 使…

探索Lora:微调大型语言模型和扩散模型的低秩适配方法【原理解析,清晰简洁易懂!附代码】

探索Lora&#xff1a;微调大型语言模型和扩散模型的低秩适配方法 随着深度学习技术的快速发展&#xff0c;大型语言模型&#xff08;LLMs&#xff09;和扩散模型&#xff08;Diffusion Models&#xff09;在自然语言处理和计算机视觉领域取得了显著的成果。然而&#xff0c;这…

【tomcat 源码分析总结】

文章目录 tomcat官网路径目录结构介绍&#xff1a;Tomcat 系统架构 和 原理剖析http 的请求的处理过程 Tomcat 请求处理大致过程 tomcat官网路径 目录结构介绍&#xff1a; confserver.xml 端口的指定tomcat-users.xml 角色web.xml : tomcat 全局的xmllogging.properties 日志…

项目管理主要文档介绍

1、商业论证&#xff1a;一般由项目发起人创建&#xff0c;用于论证项目是否对组织有财务方面的收益。商业论证创建于项日开始之前&#xff0c;用于判断项目是否需要被开展。 2、项目章程&#xff1a;一般由项日经理创建,并由发起入和关键相关力提供输人&#xff0c;最后经项目…

长难句打卡5.31

In a workplace that’s fundamentally indifferent to your life and its meaning, office speak can help you figure out how you relate to your work—and how your work defines who you are. 在一个对你的生活和生活意义漠不关心的工作场所中&#xff0c;办公室语言可以…

ArcGIS空间数据处理、空间分析与制图;PLUS模型和InVEST模型的原理,参量提取与模型运行及结果分析;土地利用时空变化以及对生态系统服务的影响分析

工业革命以来&#xff0c;社会生产力迅速提高&#xff0c;人类活动频繁&#xff0c;此外人口与日俱增对土地的需求与改造更加强烈&#xff0c;人-地关系日益紧张。此外&#xff0c;土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…

禁用USB端口的办法,哪一种禁用USB端口的方法好

禁用USB端口的办法&#xff0c;哪一种禁用USB端口的方法好 禁用USB端口是保护公司数据安全的一种常见做法&#xff0c;旨在防止未经授权的数据传输和潜在的恶意软件传播。以下是几种常见的禁用USB端口方法及其效果评价。 1、硬件方法&#xff1a; BIOS设置&#xff1a;通过BIO…