運(yùn)用Python快速的對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行重命名
對(duì)數(shù)據(jù)庫(kù)的表進(jìn)行重命名可以使用以下原生sql:
RENAME TABLE old_table TO new_table;
窘境:但是MySQL并沒(méi)有直接支持對(duì)數(shù)據(jù)庫(kù)進(jìn)行重命名
那么如何運(yùn)用Python快速的對(duì)現(xiàn)有的數(shù)據(jù)庫(kù)進(jìn)行重命名呢?
比如項(xiàng)目初期,對(duì)數(shù)據(jù)庫(kù)的命名(db_ridingroad)沒(méi)有規(guī)劃好,
然后在下面創(chuàng)建了大量的表和寫(xiě)入了大量的數(shù)據(jù),現(xiàn)在需要對(duì)數(shù)據(jù)庫(kù)的名字進(jìn)行重命名為(db_news_website)
常規(guī)思路
下面的方法步驟較為繁瑣
-- 數(shù)據(jù)庫(kù)備份 mysqldump –u [UserName] –p[Password] –R [DB_Name] > [DB_Name].sql -- 創(chuàng)建新數(shù)據(jù)庫(kù) create database [New_DB_Name]; -- 把備份的數(shù)據(jù)導(dǎo)入到新數(shù)據(jù)庫(kù) mysql –u [UserName] –p[Password] [New_DB_Name] < [DB_Name].sql -- 刪除舊數(shù)據(jù)庫(kù) drop database [DB_Name];
更快捷的方法
只需要執(zhí)行下面這條命令即可
python rename_database.py old_db_name new_db_name
我們可以使用表重命名的方法,把表重命名到新的數(shù)據(jù)庫(kù)之下。基本邏輯如下:
- 創(chuàng)建新數(shù)據(jù)庫(kù)
- 獲取舊數(shù)據(jù)庫(kù)下所有的表名
- 把表重命名到新的數(shù)據(jù)庫(kù)名下
- 刪除舊數(shù)據(jù)庫(kù)
下面使用Python代碼去實(shí)現(xiàn),主要代碼(完整代碼見(jiàn)文末):
def rename_db(old_name, new_name): """ 數(shù)據(jù)庫(kù)重命名 :param old_name: 原來(lái)的數(shù)據(jù)庫(kù)名 :param new_name: 新數(shù)據(jù)庫(kù)名 :return: 成功返回True, 失敗返回False """ # 獲取所有的表名 sql = """SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=%s""" conn, cursor = context() try: # 創(chuàng)建新數(shù)據(jù)庫(kù)名 cursor.execute('create database if not exists {}'.format(new_name)) cursor.execute(sql, (old_name, )) results = cursor.fetchall() # 獲取表明,循環(huán)處理放到新的數(shù)據(jù)庫(kù)名下 for r in results: tb = r['TABLE_NAME'] rename_sql = """RENAME TABLE {}.{} to {}.{}""".format(old_name, tb, new_name, tb) cursor.execute(rename_sql) # 把舊數(shù)據(jù)庫(kù)刪掉 cursor.execute('drop database {}'.format(old_name)) except Exception as ex: conn.rollback() print("rename_db Exception: {},{}".format(sql, ex)) return False else: # 如果沒(méi)有發(fā)生異常,則提交事務(wù) conn.commit() finally: conn.close() return True
使用方法
1.安裝PyMySQL
pip install PyMySQL
2.修改腳本中關(guān)于數(shù)據(jù)庫(kù)賬號(hào)配置信息部分
MYSQL_HOST = '127.0.0.1' MYSQL_PORT = 3306 MYSQL_USER = 'ridingroad' MYSQL_PASSWORD = 'xxxxyyyy' MYSQL_DATABASE = 'db_ridingroad'
3.切換到腳本所在目錄,執(zhí)行以下命令即可(數(shù)據(jù)無(wú)價(jià),請(qǐng)先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): """ 創(chuàng)建數(shù)據(jù)庫(kù)連接, 數(shù)據(jù)以字典結(jié)構(gòu)返回 :param is_dict_cursor: 是否返回字典結(jié)構(gòu)的數(shù)據(jù) :param database: 默認(rèn)連接的數(shù)據(jù)庫(kù) :return: 返回一個(gè)連接和一個(gè)浮標(biāo) """ 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): """ 數(shù)據(jù)庫(kù)重命名 :param old_name: 原來(lái)的數(shù)據(jù)庫(kù)名 :param new_name: 新數(shù)據(jù)庫(kù)名 :return: 成功返回True, 失敗返回False """ # 獲取所有的表名 sql = """SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=%s""" conn, cursor = context() try: conn.begin() # 創(chuàng)建新數(shù)據(jù)庫(kù)名 cursor.execute('create database if not exists {}'.format(new_name)) cursor.execute(sql, (old_name, )) results = cursor.fetchall() # 獲取表明,循環(huán)處理放到新的數(shù)據(jù)庫(kù)名下 for r in results: tb = r['TABLE_NAME'] rename_sql = """RENAME TABLE {}.{} to {}.{}""".format(old_name, tb, new_name, tb) cursor.execute(rename_sql) # 把舊數(shù)據(jù)庫(kù)刪掉 cursor.execute('drop database {}'.format(old_name)) except Exception as ex: conn.rollback() print("rename_db Exception: {},{}".format(sql, ex)) return False else: # 如果沒(méi)有發(fā)生異常,則提交事務(wù) 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)
以上就是運(yùn)用Python快速的對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行重命名的詳細(xì)內(nèi)容,更多關(guān)于python 重命名MySQL數(shù)據(jù)庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
通過(guò)python連接Linux命令行代碼實(shí)例
這篇文章主要介紹了通過(guò)python連接Linux命令行代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Pytorch入門(mén)之mnist分類(lèi)實(shí)例
這篇文章主要為大家詳細(xì)介紹了Pytorch入門(mén)之mnist分類(lèi)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04Pandas數(shù)值排序 sort_values()的使用
本文主要介紹了Pandas數(shù)值排序 sort_values()的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07python使用arp欺騙偽造網(wǎng)關(guān)的方法
這篇文章主要介紹了python使用arp欺騙偽造網(wǎng)關(guān)的方法,涉及Python偽造網(wǎng)關(guān)的相關(guān)技巧,需要的朋友可以參考下2015-04-04用python實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)
這篇文章主要分享的是用python實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu),快速排序、選擇排序、插入排序、歸并排序、堆排序heapq模塊等相關(guān)資料,感興趣的小伙伴可以參考一下2021-12-12python GUI編程(Tkinter) 創(chuàng)建子窗口及在窗口上用圖片繪圖實(shí)例
這篇文章主要介紹了python GUI編程(Tkinter) 創(chuàng)建子窗口及在窗口上用圖片繪圖實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Python利用pymupdf實(shí)現(xiàn)簡(jiǎn)單的PDF閱讀器
這篇文章主要為大家詳細(xì)介紹了Python如何利用pymupdf實(shí)現(xiàn)簡(jiǎn)單的PDF閱讀器,并展示了PDF文件的內(nèi)容,文中的示例代碼講解詳細(xì),需要的可以了解一下2023-08-08python+html實(shí)現(xiàn)前后端數(shù)據(jù)交互界面顯示的全過(guò)程
最近項(xiàng)目中采用了前后端分離的技術(shù),感覺(jué)有必要給大家總結(jié)下,所以下面這篇文章主要給大家介紹了關(guān)于python+html實(shí)現(xiàn)前后端數(shù)據(jù)交互界面顯示的相關(guān)資料,需要的朋友可以參考下2022-06-06