利用Python修改Mysql 数据库,指定前缀

import pymysql

# 数据库连接配置(需修改!)
db_config = {
    'host': '127.0.0.1',
    'port': 20632,
    'user': 'root',
    'password': 'root',
    'database': 'pes-xa',
    'charset': 'utf8mb4'
}

def modify_table_structure(table_name):
    """
    修改指定表的结构
    :param table_name: 要修改的表名
    """
    try:
        # 建立数据库连接
        connection = pymysql.connect(**db_config)
        print(f"成功连接到数据库:{db_config['database']}")

        with connection.cursor() as cursor:
            # 1. 修改 create_user 字段为 create_by
            sql1 = f"""
            ALTER TABLE `{table_name}` 
            CHANGE COLUMN `create_user` `create_by` 
            varchar(255) COLLATE utf8mb4_bin DEFAULT NULL 
            COMMENT '创建人';
            """
            cursor.execute(sql1)
            print(f"已执行 SQL1:修改 {table_name} 的 create_user 字段")

            # 2. 修改 update_user 字段为 update_by
            sql2 = f"""
            ALTER TABLE `{table_name}` 
            CHANGE COLUMN `update_user` `update_by` 
            varchar(255) COLLATE utf8mb4_bin DEFAULT NULL 
            COMMENT '更新人';
            """
            cursor.execute(sql2)
            print(f"已执行 SQL2:修改 {table_name} 的 update_user 字段")

            # 3. 删除 create_dept 字段
            sql3 = f"""
            ALTER TABLE `{table_name}` 
            DROP COLUMN `create_dept`;
            """
            cursor.execute(sql3)
            print(f"已执行 SQL3:删除 {table_name} 的 create_dept 字段")

        # 提交事务
        connection.commit()
        print(f"表 {table_name} 修改成功!")

    except pymysql.Error as e:
        print(f"处理表 {table_name} 时数据库错误:{e}")
        connection.rollback()
    finally:
        if connection:
            connection.close()
            print(f"表 {table_name} 处理完成,数据库连接已关闭")

def get_tables_with_prefix(prefix):
    """
    获取数据库中以指定前缀开头的所有表名
    :param prefix: 表名前缀
    :return: 符合条件的表名列表
    """
    try:
        connection = pymysql.connect(**db_config)
        with connection.cursor() as cursor:
            # 查询以指定前缀开头的表名
            sql = f"SHOW TABLES LIKE '{prefix}%'"
            cursor.execute(sql)
            tables = cursor.fetchall()
            return [table[0] for table in tables]
    except pymysql.Error as e:
        print(f"获取表名时数据库错误:{e}")
        return []
    finally:
        if connection:
            connection.close()

def main():
    """
    主函数:获取以指定前缀开头的表名并执行修改
    """
    print("=== 表结构批量修改工具 ===")
    prefix = input("请输入要修改的表名前缀(例如:t_):")
    tables = get_tables_with_prefix(prefix)
    if not tables:
        print(f"未找到以 {prefix} 开头的表。")
    else:
        for table in tables:
            modify_table_structure(table)

if __name__ == "__main__":
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值