使用Python快速重命名MySQL数据库的方法

小林子
小林子
发布时间:2026-10-14 | 4人浏览过
原创

本文介绍如何利用Python脚本快速重命名MySQL数据库。通过获取旧库所有表名,利用RENAME TABLE语句将表迁移至新数据库,最后删除旧库。文章提供了完整的Python实现代码及配置说明,适用于需要快速调整数据库名称的场景。

对数据库中的表进行重命名,可以使用以下原生SQL语句:


RENAME TABLE old_table TO new_table;  

然而,MySQL并没有直接支持对数据库整体进行重命名的功能。

那么,如何运用Python快速对现有的数据库进行重命名呢?

例如在项目初期,数据库命名(db_ridingroad)未做好规划,随后在该库下创建了海量表并写入了大量数据。现在需要将数据库名称重命名为(db_news_website)。

常规思路

以下方法步骤较为繁琐:


-- 数据库备份
mysqldump –u [UserName] –p[Password] –R [DB_Name] > [DB_Name].sql
-- 创建新数据库
create database [New_DB_Name];
-- 把备份的数据导入到新数据库
mysql –u [UserName] –p[Password] [New_DB_Name] < [DB_Name].sql
-- 删除旧数据库
drop database [DB_Name];

更快捷的方法

只需执行以下命令即可:


python rename_database.py old_db_name new_db_name

我们可以利用表重命名的方法,将表重命名到新数据库之下。基本逻辑如下:

  1. 创建新数据库
  2. 获取旧数据库下所有的表名
  3. 把表重命名到新的数据库名下
  4. 删除旧数据库

下面使用Python代码去实现,主要代码(完整代码见文末):


def rename_db(old_name, new_name):
    """
    数据库重命名
    :param old_name: 原来的数据库名
    :param new_name: 新数据库名
    :return: 成功返回True, 失败返回False
    """
    # 获取所有的表名
    sql = """SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=%s"""
    conn, cursor = context()
    try:
        # 创建新数据库名
        cursor.execute('create database if not exists {}'.format(new_name))

        cursor.execute(sql, (old_name, ))
        results = cursor.fetchall()
        # 获取表明,循环处理放到新的数据库名下
        for r in results:
            tb = r['TABLE_NAME']
            rename_sql = """RENAME TABLE {}.{} to {}.{}""".format(old_name, tb, new_name, tb)
            cursor.execute(rename_sql)
        # 把旧数据库删掉
        cursor.execute('drop database {}'.format(old_name))
    except Exception as ex:
        conn.rollback()
        print("rename_db Exception: {},{}".format(sql, ex))
        return False
    else:
        # 如果没有发生异常,则提交事务
        conn.commit()
    finally:
        conn.close()
    return True

使用方法

1.安装PyMySQL


pip install PyMySQL

2.修改脚本中关于数据库账号配置信息部分


MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'ridingroad'
MYSQL_PASSWORD = 'xxxxyyyy'
MYSQL_DATABASE = 'db_ridingroad'

3.切换到脚本所在目录,执行以下命令即可(数据无价,请先mysqldump备份)


python rename_database.py old_db_name new_db_name

完整代码如下:


import sys
import pymysql


MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'ridingroad'
MYSQL_PASSWORD = 'xxxxyyyy'
MYSQL_DATABASE = 'db_ridingroad'
MYSQL_CHARSET = 'utf8'


def context(is_dict_cursor=True, database=MYSQL_DATABASE):
    """
    创建数据库连接, 数据以字典结构返回
    :param is_dict_cursor: 是否返回字典结构的数据
    :param database: 默认连接的数据库
    :return: 返回一个连接和一个浮标
    """
    try:
        config = {
            'host': MYSQL_HOST,
            'port': MYSQL_PORT,
            'user': MYSQL_USER,
            'password': MYSQL_PASSWORD,
            'database': database,
            'charset': MYSQL_CHARSET,
        }

        conn = pymysql.connect(**config)
        if is_dict_cursor:
            cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        else:
            cursor = conn.cursor()
        return conn, cursor
    except Exception as ex:
        print("connect database failed, {},{}".format(400, ex))
        raise Exception({'code': 400, 'msg': ex})


def rename_db(old_name, new_name):
    """
    数据库重命名
    :param old_name: 原来的数据库名
    :param new_name: 新数据库名
    :return: 成功返回True, 失败返回False
    """
    # 获取所有的表名
    sql = """SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=%s"""
    conn, cursor = context()
    try:
        conn.begin()
        # 创建新数据库名
        cursor.execute('create database if not exists {}'.format(new_name))

        cursor.execute(sql, (old_name, ))
        results = cursor.fetchall()
        # 获取表明,循环处理放到新的数据库名下
        for r in results:
            tb = r['TABLE_NAME']
            rename_sql = """RENAME TABLE {}.{} to {}.{}""".format(old_name, tb, new_name, tb)
            cursor.execute(rename_sql)
        # 把旧数据库删掉
        cursor.execute('drop database {}'.format(old_name))
    except Exception as ex:
        conn.rollback()
        print("rename_db Exception: {},{}".format(sql, ex))
        return False
    else:
        # 如果没有发生异常,则提交事务
        conn.commit()
    finally:
        conn.close()
    return True


if __name__ == '__main__':
    old_db = sys.argv[1]
    new_db = sys.argv[2]
    rename_db(old_name=old_db, new_name=new_db)

以上就是运用Python快速的对MySQL数据库进行重命名的详细内容,更多关于python 重命名MySQL数据库的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表