婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 運用Python快速的對MySQL數據庫進行重命名

運用Python快速的對MySQL數據庫進行重命名

熱門標簽:南陽打電話機器人 海外網吧地圖標注注冊 孝感營銷電話機器人效果怎么樣 ai電銷機器人的優勢 地圖標注自己和別人標注區別 聊城語音外呼系統 商家地圖標注海報 騰訊地圖標注沒法顯示 打電話機器人營銷

對數據庫的表進行重命名可以使用以下原生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教程命名元組示例分析
  • 一篇文章教你用Python實現一鍵文件重命名
  • Python如何根據照片修改時間重命名并排序詳解
  • python文件名批量重命名腳本實例代碼
  • Python中os模塊的簡單使用及重命名操作
  • 一文理解Python命名機制

標簽:撫州 迪慶 楊凌 牡丹江 六盤水 聊城 南寧 揚州

巨人網絡通訊聲明:本文標題《運用Python快速的對MySQL數據庫進行重命名》,本文關鍵詞  運用,Python,快速,的,對,MySQL,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《運用Python快速的對MySQL數據庫進行重命名》相關的同類信息!
  • 本頁收集關于運用Python快速的對MySQL數據庫進行重命名的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 锦州市| 攀枝花市| 富民县| 温宿县| 东港市| 黄骅市| 屯留县| 镇宁| 朝阳市| 鄢陵县| 商水县| 东阳市| 盖州市| 沅江市| 五莲县| 富裕县| 永福县| 华池县| 太白县| 长寿区| 琼中| 福泉市| 体育| 铁岭县| 宜丰县| 彰化市| 若羌县| 张家界市| 贵定县| 兖州市| 烟台市| 长兴县| 宜君县| 阳春市| 永济市| 衡东县| 高州市| 新绛县| 化隆| 静海县| 松原市|