Python读取excel内容追加到mysql表中赋予字段注释

news2024/9/21 19:18:57

前言

由于最近遇到一个实体类有特别多的字段,我就想自己一个地在表中创建,并写注释未免太浪费人力和时间了,然后在网上查找资料,果不其然让我看到了一个可以使用Python读取excel内容追加到mysql表中赋予字段注释,这简直是他好了

正文

1、首先你的把你的实体类所有的字段保存到一个新的excel表中,统一放到一行中

问题: 如何把你的实体类所有的字段保存到一个新的excel表?

答: 你得有个vs Code工具,将实体类的代码粘贴上去,然后利用快捷键shfit + alt 把多余的删掉
在这里插入图片描述
然后把他们放到一个excel表中
在这里插入图片描述
在一个空格右键选择性粘贴->转置
在这里插入图片描述
在这里插入图片描述
出来了
在这里插入图片描述
2、然后在navicat把它导入进去
在这里插入图片描述
在这里插入图片描述
…这里不贴了,你改下字段类型即可

3、Python读取excel内容追加到mysql表中赋予字段注释

这里又要新开个excel表了喔,用来存你刚刚创好的字段、表名,然后你就在这里写入每个字段的注释即可
在这里插入图片描述
以下是这篇文章的主要的代码(建议直接复制粘贴,当然你的数据库名字、密码、账号、表名你都要修改):

import openpyxl
import os
import pymysql
import pdb

hostname = '127.0.0.1'
uname = 'root'
pword = 'root'


# 以追加的形式打印出建表sql和需要加注释的sql
def writeFile(content: str):
    with open('aa', 'a') as f:
        f.write('{} \n'.format(content))


# 连接数据库,获取建表sql
def getTableSql(tablename):
    conn = pymysql.connect(host=hostname, port=3306, user=uname, password=pword, database='iec104')
    res = None
    try:
        cursor = conn.cursor()
        cursor.execute('show create table {}'.format(tablename))
        _, res = cursor.fetchone()
    except pymysql.Error as err:
        print(err)
    finally:
        cursor.close()
        conn.close()
    return res


# 替换sql部分 匹配到相关行 后面加上注释。因为用的逗号分隔 考虑到decimal(m,n)这种情况,所以第一段匹配后,要加上后面的再加注释,所以用flag来标识。
def replaceSql(createsql, fieldvalue, fielddesc, tablename, isfirst):
    if createsql is None or createsql == '' or 'exist' in createsql or str(fieldvalue).lower() == 'id':
        return
    # pdb.set_trace()
    lsql = createsql.split(',')

    # print(lsql)
    col = '`{}`'.format(fieldvalue.lower())
    desc = "comment '{}'".format(fielddesc)
    altertab = ''
    decimalproc = ''
    decimalflag = False
    if isfirst == 1:
        altertab = ' alter table {} '.format(tablename)
    else:
        altertab = ''
    altersql = ''
    for isql in lsql:
        if decimalflag:
            altersql = '{} ,{} {},'.format(altersql, isql, desc)
            decimalflag = False
            break

        if col in isql:
            # if col == 'discount_amount':
            #  pdb.set_trace()
            if 'decimal' in isql:
                # decimal process two line
                # pdb.set_trace()
                decimalflag = True
                altersql = '{} modify {} '.format(altertab, isql)
            else:
                altersql = '{} modify {} {},'.format(altertab, isql, desc)
                break
    print(altersql)
    writeFile(altersql)


# 接下来是读excel 区分是读表名 或 列名
def readExcel(fpath):
    ''' read sheet1 file contents:
        row1  col1 'tablename'   col2 tablename   col3     describtion
        row2        fields            fieldsdescribtion    demo
        real content....

        space

        row1  col1  'tablename'  col2 tablename   col3     describtion
        ....
        can igore fiedl3
    '''
    readwb = openpyxl.load_workbook(fpath)
    # read sheet1 default
    ws = readwb.active

    col = 1  # column number in Excel
    isfirst = 1  # table first column
    createsql = ''  # create sql statement
    tablename = ''  # tablename
    for row in range(1, ws.max_row + 1):
        print(row)
        # pdb.set_trace()
        col = 1
        evaluecoo = ws.cell(row=row, column=col).value
        if str(evaluecoo).strip() is None or str(evaluecoo).strip() == '':

            createsql = ''
            tablename = ''
            isfirst = 1

        elif str(evaluecoo).strip() == '字段':
            continue
        elif str(evaluecoo).strip() == '表名':
            col += 1
            evaluecot = ws.cell(row=row, column=col).value
            # connect db get create table sql
            tablename = evaluecot
            createsql = getTableSql(evaluecot)
            # write create sql to file
            if createsql is None:
                writeFile('\n table is not found {}'.format(tablename))
            else:
                writeFile(createsql)

        else:
            fieldvalue = ws.cell(row=row, column=col).value
            fielddesc = ws.cell(row=row, column=col + 1).value
            # add alter table  statement

            # skip fielddesc  None
            if fielddesc is None or str(fielddesc).strip() == '':
                continue

                # add alter table  statement
            replaceSql(createsql, fieldvalue, fielddesc, tablename, isfirst)
            # skip id
            if str(fieldvalue).lower() == 'id':
                isfirst = 1
            else:
                isfirst = 0


# 程序开始执行
if __name__ == '__main__':
    readExcel('./ss.xlsx')

在这里插入图片描述
问题:可能你会遇到openpyxl、pymysql爆红,点这里搜名字下载即可
在这里插入图片描述

效果:
在这里插入图片描述
参考:
https://blog.csdn.net/haohaojiuhao123/article/details/104389054

https://blog.csdn.net/python_xep/article/details/115477755?spm=1001.2014.3001.5506

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端零碎知识随笔

一、介绍 本篇博客主要使用来记录一些比较零碎的知识点,都是本人在日常开发工作中遇到的,或者是在学习过程中遇到的。因为这些知识点都比较零碎,为了防止遗忘,所以特意写一篇博客来记录,后面也不会不断慢慢更新的。 …

[附源码]计算机毕业设计Python-大学生健康档案管理(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

JSP+MySQL基于ssm的环保数据自动采集及预测系统

在21世纪的今天,随着科技的进步和发展,人们的生活逐渐趋于自动化、便捷化、数据化。而发展总会有代价,科技的进步总是伴随着环境的恶化。人类用智慧将地球的资源充分利用,以便丰富人们的生活,推动国家的进步。回过头去看,地球的环境已经成为威胁人类长久生存的主要问题之一。在…

34-Vue之ECharts高级-调色盘

ECharts高级-调色盘前言调色盘主题调色盘全局调色盘局部调色盘渐变颜色前言 本篇来学习下ECharts中调色盘的使用 调色盘 它是一组颜色,图形、系列会自动从其中选择颜色, 不断的循环从头取到尾, 再从头取到尾, 如此往复主要分三种:主题调色盘、全局调色…

基于GDAL的gdb格式数据读写功能实现

一、GDAL类库下载: 下载地址:GISInternals Support Site 比如我下载的是release-1930-x64-gdal-3-4-2-mapserver-7-6-4 点击release-1930-x64-gdal-3-4-2-mapserver-7-6-4的链接,下载这两个文件 二、解压文件和安装gdb插件 1.下载好的两个…

Innodb存储引擎-备份和恢复(分类、冷备、热备、逻辑备份、二进制日志备份和恢复、快照备份、复制)

文章目录备份和恢复分类冷备热备逻辑备份mysqldumpSELECT...INTO OUTFILE恢复二进制日志备份与恢复快照备份(完全备份)复制快照复制的备份架构备份和恢复 分类 (1)根据备份的方法可以分为: Hot Backup(热备)&#x…

【图像去噪】中值+均值+Lee+Kuan图像滤波【含Matlab源码 1179期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y&#xff0…

ADI Blackfin DSP处理器-BF533的开发详解63:DSP接总线屏的硬件和驱动设计(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 EBIU总线LCD屏 硬件实现原理 LCD2.4 寸液晶屏子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT1 和 PORT2 上,板卡插入时&#xf…

基于JAVA的水产批发系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):

【Linux】低级IO

目录 一、文件的概念 二、C语言文件操作回顾 三、使用系统调用进行文件I/O 1、系统调用open 1.1open接口介绍 1.2open形参中标记位flags的意义 1.3open的使用 2、系统调用write 2.1write接口介绍 2.2write的使用 3、系统调用read 3.1read接口介绍 3.2read的使用 …

什么是 SAP ABAP FDA - Fast Data Access 技术?

快速数据访问 (Fast Data Access,缩写为 FDA) 是一种可在 SAP ABAP 环境中访问的协议。 它允许针对 SAP HANA 提交 OPEN SQL SELECT 语句,从而使用 SAP ABAP 的数据格式。 在快速数据访问场景里,SAP ABAP 内表数据传输到数据库并返回。这种方…

Java+MySQL基于ssm的物理竞赛管理系统

物理竞赛是对课堂上所学的理论知识的实践运用,加深所学知识的理解,锻炼团队协作能力。学生可以根据个人爱好,个人特长选择参与,不仅能培养学生的创新意思、提高专业技能,还能锻炼学生的组织能力和协作能力。物理竞赛是在中国科协的领导下,由中国物理学会主办,各省、自治区、直辖…

【力扣周赛#324】6266. 使用质因数之和替换后可以取到的最小值+6267. 添加边使所有节点度数都为偶数+6268. 查询树中环的长度

目录 6265. 统计相似字符串对的数目 - ac 6266. 使用质因数之和替换后可以取到的最小值 分解质因数 1、tle代码 2、优化ac代码 6267. 添加边使所有节点度数都为偶数 - 建图分类讨论 关于建图 6268. 查询树中环的长度 - LCA最近公共祖先 6265. 统计相似字符串对的数目…

[附源码]Nodejs计算机毕业设计基于微信平台的车险投保系统设计与实现Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Vue实现后台管理系统

目录 前言 登录页面 后台界面 前言 今天用Vue实现一个简易的后台,不借助接口和后端代码,仅通过前端实现,本案例涉及Vue路由相关知识,不熟悉Vue路由可以先看一下右边的文章再接着看下面的项目案例:Vue路由 这篇文章详…

[CISCN2019 华北赛区 Day1 Web2]

目录 前言 涉及考点 部分记录 前言 第一次看到这题时没有思路,通过搜索相关WP并简单了解考点所涉及的知识后,通过解题来扩展自己的知识面 涉及考点 python爬虫,支付逻辑漏洞,cookie篡改,重放攻击,JWT…

C++11后的STL算法

文章目录一、函数对象二、预定义的函数对象三、算法函数1.自己实现foreach算法2.自己实现的findif算法3.自己实现bsort算法一、函数对象 STL提供了很多处理容器的函数模板,它们的设计是相同的,有以下特点: 1)用迭代器表示需要处理…

数据结构---用栈实现队列

用栈实现队列模拟入队模拟出队JAVA实现总结用栈来模拟一个队列,要求实现队列的两个基本操作:入队、出队。栈是先入后出,队列是先入先出 用两个栈来实现一个队列功能 让其中一个栈作为队列的入口,负责插入新元素;另一个…

ARM9和STM32什么关系?

已剪辑自: https://mp.weixin.qq.com/s/QHARY-D2SwFoQbFsJoCNlg 有小伙伴问:ARM9和STM32什么关系?如果时间倒退10年,ARM9、 s3c2410还算是比较流行的年代,但STM32这类“新时代”的ARM处理器也问世了。 ARM9是早期的ARM处理器&…

Java+MySQL基于ssm的打车管理系统的设计与实现

随着时代的发展,交通也变的越来越便利,但是很多时候人们出行的时候因为各种原因还是会进行打车,因为一些地区比较偏远或者处于特殊的时间段而用户又急需用车等情况导致没办法及时的打到车,这种情况下就急需一套基于互联网的打车系统出现了。 本打车管理系统采用JAVA语言来进行开…