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

搭建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

相关文章

暂无评论

暂无评论...