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

打印 上一主题 下一主题

主题 881|帖子 881|积分 2643

前提:搭建python相关情况
目的:
  1. <strong>    将驼峰式命名或混合大小写的字段名转换为下划线分隔的小写字段名。
  2.     例如:UserName -> user_name, userName -> user_name</strong>
复制代码
一、新建脚本 update_table_column_names.py
  1. import pymysql
  2. import re
  3. import sys
  4. def to_snake_case(name):
  5.     s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
  6.     return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
  7. # 获取命令行参数,如果存在则使用指定表名,否则为空
  8. specified_table = sys.argv[1] if len(sys.argv) > 1 else None
  9. # 连接数据库
  10. conn = pymysql.connect(host='192.168.1.1', port=3306, user='root', password='123456', db='test')
  11. cursor = conn.cursor()
  12. if specified_table:
  13.     tables = [(specified_table,)]
  14. else:
  15.     # 获取所有表名
  16.     cursor.execute("SHOW TABLES")
  17.     tables = cursor.fetchall
  18. for table in tables:
  19.     original_table_name = table[0]
  20.     new_table_name = to_snake_case(original_table_name)
  21.     if original_table_name != new_table_name:
  22.         # 使用 ALTER TABLE 语句修改表名
  23.         cursor.execute(f"ALTER TABLE `{original_table_name}` RENAME TO `{new_table_name}`")
  24.     # 获取表的所有列及其详细信息,包括注释
  25.     cursor.execute(f"SHOW FULL COLUMNS FROM `{new_table_name}`")
  26.     columns = cursor.fetchall()
  27.     for column in columns:
  28.         column_name = column[0]
  29.         column_type = column[1]
  30.         is_nullable = "NULL" if column[3] == "YES" else "NOT NULL"
  31.         default_value = f"DEFAULT {column[5]}" if column[5] else ""
  32.         extra = column[6]
  33.         column_comment = column[8]
  34.         
  35.         new_column_name = to_snake_case(column_name)
  36.         if column_name != new_column_name:
  37.             # 保留注释、默认值等元数据
  38.             cursor.execute(f"""ALTER TABLE `{new_table_name}`
  39.                                CHANGE COLUMN `{column_name}` `{new_column_name}` {column_type}
  40.                                {is_nullable} {default_value} {extra} COMMENT '{column_comment}'""")
  41. conn.commit()
  42. cursor.close()
  43. conn.close()
复制代码
二、执行脚本命令
  1. 注意:默认不写表名称,则更新所有的表
  2. py .\update_table_column_names.py table_name
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表