首页 > 数据库 >使用python脚本,批量修改mysql数据库表字段名称

使用python脚本,批量修改mysql数据库表字段名称

时间:2024-12-25 17:42:26浏览次数:10  
标签:execute name python 表字 new cursor column mysql table

前提:搭建python相关环境

目的:

    将驼峰式命名或混合大小写的字段名转换为下划线分隔的小写字段名。
    例如:UserName -> user_name, userName -> user_name

一、新建脚本 update_table_column_names.py

import pymysql
import re
import sys

def to_snake_case(name):
    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()

# 获取命令行参数,如果存在则使用指定表名,否则为空
specified_table = sys.argv[1] if len(sys.argv) > 1 else None

# 连接数据库
conn = pymysql.connect(host='192.168.1.1', port=3306, user='root', password='123456', db='test')
cursor = conn.cursor()

if specified_table:
    tables = [(specified_table,)]
else:
    # 获取所有表名
    cursor.execute("SHOW TABLES")
    tables = cursor.fetchall

for table in tables:
    original_table_name = table[0]
    new_table_name = to_snake_case(original_table_name)
    if original_table_name != new_table_name:
        # 使用 ALTER TABLE 语句修改表名
        cursor.execute(f"ALTER TABLE `{original_table_name}` RENAME TO `{new_table_name}`")

    # 获取表的所有列及其详细信息,包括注释
    cursor.execute(f"SHOW FULL COLUMNS FROM `{new_table_name}`")
    columns = cursor.fetchall()
    for column in columns:
        column_name = column[0]
        column_type = column[1]
        is_nullable = "NULL" if column[3] == "YES" else "NOT NULL"
        default_value = f"DEFAULT {column[5]}" if column[5] else ""
        extra = column[6]
        column_comment = column[8]
        
        new_column_name = to_snake_case(column_name)
        if column_name != new_column_name:
            # 保留注释、默认值等元数据
            cursor.execute(f"""ALTER TABLE `{new_table_name}` 
                               CHANGE COLUMN `{column_name}` `{new_column_name}` {column_type} 
                               {is_nullable} {default_value} {extra} COMMENT '{column_comment}'""")

conn.commit()
cursor.close()
conn.close()

二、执行脚本命令

注意:默认不写表名称,则更新所有的表
py .\update_table_column_names.py table_name

 

标签:execute,name,python,表字,new,cursor,column,mysql,table
From: https://www.cnblogs.com/lwqstyle/p/18631079

相关文章

  • python 升级
    `1.cd/usr/src#进入到这个目录wgetwgethttps://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz#进行安装包的安装tar-xzfPython-3.9.1.tgz#进行解压cdPython-3.9.1#进入并进行编译安装./configure如果没有升级过Python就需要安装Python相关的依......
  • 从互联网上下载文件python代码
    importrequestsimporttracebackimportosdefdownload_file(url,filename):"""将链接中的数据存储入文件中。Args:url:链接。filename:文件路径名。Raises:KeyboardInterrupt:用户按^C引发异常。Exception:发生异......
  • mysql主键不能有null而唯一键可以有重复的null值并且都不能有重复的空值
    mysql主键不能有null而唯一键可以有重复的null值并且都不能重复的空值root@e9be1791c2c1:/#mysql-uroot-pEnterpassword: WelcometotheMySQLmonitor. Commandsendwith;or\g.YourMySQLconnectionidis33893Serverversion:5.7.32-logMySQLCommunityServer......
  • 【mysql】启动指令
    数据库启动/usr/local/mysql/bin/mysqld_safe--defaults-file=/mysql/my.cnf--user=yysaas&这行命令以安全模式启动MySQL数据库服务器的。下面详细解释一下这条命令的各个部分:/usr/local/mysql/bin/mysqld_safe:mysqld_safe是一个启动脚本,用于启动MySQL数据库守护进程......
  • MySQL for update skip locked 与 for update nowait
    理论(下方有实操)forupdateskiplocked官方文档:https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html#innodb-locking-reads-for-update语法:select语句后跟forupdateskiplocked作用:目标对象没有被其它会话加锁则可加锁,被其它会话加了锁就跳过。解决问题:......
  • python tqdm 进度条尝试
    起因上期博客(https://www.cnblogs.com/timmoc/p/18630509)不是研究着发现没有进度条还是太不直观了吗那今天来整个进度条。好的本篇随笔到此结束不是这也太水了吧,试着按到上篇博客里面?只需要修改worker的代码就好了。不是不是,等等,我说停停。合着这个进度条是每次打印......
  • mysql出现unblock with 'mysqladmin flush-hosts'
    朋友发来消息,说一个系统应用登录的时候提示连接超时,让帮忙处理一下。问他应用和数据库是否都正常,回复说数据库好像没有问题,但是应用日志报无法连接数据库。数据库版本是:5.5.53让他telnet数据库是否是通的,回复说不通,并发来了信息提示:12345#telnet 8.8.9.93306......
  • mysql 127.0.0.1连接正常,使用ip无法连接
    mysql127.0.0.1连接正常,使用ip无法连接1.使用127.0.0.1连接mysqlmysql-uroot-p-h127.0.0.12.使用ip连接mysql#查看当前虚机的ip地址ipa#使用ip地址连接mysqlmysql-uroot-p-h192.168.91.133错误信息:ERROR1130(HY000):Host'192.168.91.133'isnotal......
  • Python面试手册:基础知识点合集与背记指南
    主要内容概要第1章走进PythonPython是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。本章将深入探讨Python的基本概念,包括其设计哲学、特点以及与其他编程语言的区别。我们将回顾Python的历史背景,了解其创始人GuidovanRossum如何创造这门语言,并探讨它如何迅......
  • 【华为OD-E卷-最小调整顺序次数、特异性双端队列 100分(python、java、c++、js、c)】
    【华为OD-E卷-最小调整顺序次数、特异性双端队列100分(python、java、c++、js、c)】题目有一个特异性的双端队列,该队列可以从头部或尾部添加数据,但是只能从头部移出数据。小A依次执行2n个指令往队列中添加数据和移出数据。其中n个指令是添加数据(可能从头部添加、也可能从......