運(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ù)之下?;具壿嬋缦拢?/p>
- 創(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)文章
pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死)
這篇文章主要介紹了pytorch鎖死在dataloader(訓(xùn)練時(shí)卡死),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
Pytorch相關(guān)知識(shí)介紹與應(yīng)用
最近又重拾了機(jī)器學(xué)習(xí)的相關(guān)技術(shù),在本科畢設(shè)的階段下學(xué)習(xí)使用了Tensorflow 2.x工具,當(dāng)時(shí)也是不求甚解,直接拿來(lái)用了,但現(xiàn)在已經(jīng)有充足的時(shí)間、精力和基礎(chǔ)知識(shí)來(lái)重新學(xué)習(xí)一下2022-11-11
Python個(gè)人博客程序開(kāi)發(fā)實(shí)例信息顯示
這篇文章主要介紹了怎樣用Python來(lái)實(shí)現(xiàn)一個(gè)完整的個(gè)人博客系統(tǒng),我們通過(guò)實(shí)操上手的方式可以高效的鞏固所學(xué)的基礎(chǔ)知識(shí),感興趣的朋友一起來(lái)看看吧2022-12-12
Python使用selenium實(shí)現(xiàn)網(wǎng)頁(yè)用戶名 密碼 驗(yàn)證碼自動(dòng)登錄功能
這篇文章主要介紹了Python使用selenium實(shí)現(xiàn)網(wǎng)頁(yè)用戶名 密碼 驗(yàn)證碼自動(dòng)登錄功能,實(shí)現(xiàn)思路很簡(jiǎn)單,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05
解決Python中定時(shí)任務(wù)線程無(wú)法自動(dòng)退出的問(wèn)題
今天小編就為大家分享一篇解決Python中定時(shí)任務(wù)線程無(wú)法自動(dòng)退出的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
python 實(shí)現(xiàn)mysql增刪查改示例代碼
python中可以通過(guò)pymysql實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的連接,并實(shí)現(xiàn)數(shù)據(jù)庫(kù)的各種操作,這篇文章主要給大家介紹了關(guān)于pymsql實(shí)現(xiàn)增刪改查的示例代碼,需要的朋友可以參考下2021-11-11
關(guān)于tensorflow softmax函數(shù)用法解析
這篇文章主要介紹了關(guān)于tensorflow softmax函數(shù)用法解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
使用PyInstaller將Pygame庫(kù)編寫(xiě)的小游戲程序打包為exe文件及出現(xiàn)問(wèn)題解決方法
這篇文章主要介紹了使用PyInstaller將Pygame庫(kù)編寫(xiě)的小游戲程序打包為exe文件的方法,給大家介紹了通過(guò)Pyinstaller打包Pygame庫(kù)寫(xiě)的小游戲程序出現(xiàn)的問(wèn)題及解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09

