Python項目中對MySQL數(shù)據(jù)庫重命名的方法有哪些
Admin 2022-07-01 群英技術(shù)資訊 878 次瀏覽
今天這篇我們來學(xué)習(xí)和了解“Python項目中對MySQL數(shù)據(jù)庫重命名的方法有哪些”,下文的講解詳細(xì),步驟過程清晰,對大家進(jìn)一步學(xué)習(xí)和理解“Python項目中對MySQL數(shù)據(jù)庫重命名的方法有哪些”有一定的幫助。有這方面學(xué)習(xí)需要的朋友就繼續(xù)往下看吧!對數(shù)據(jù)庫的表進(jìn)行重命名可以使用以下原生sql:
RENAME TABLE old_table TO new_table;
窘境:但是MySQL并沒有直接支持對數(shù)據(jù)庫進(jìn)行重命名
那么如何運用Python快速的對現(xiàn)有的數(shù)據(jù)庫進(jìn)行重命名呢?
比如項目初期,對數(shù)據(jù)庫的命名(db_ridingroad)沒有規(guī)劃好,
然后在下面創(chuàng)建了大量的表和寫入了大量的數(shù)據(jù),現(xiàn)在需要對數(shù)據(jù)庫的名字進(jìn)行重命名為(db_news_website)
下面的方法步驟較為繁瑣
-- 數(shù)據(jù)庫備份 mysqldump ?Cu [UserName] ?Cp[Password] ?CR [DB_Name] > [DB_Name].sql -- 創(chuàng)建新數(shù)據(jù)庫 create database [New_DB_Name]; -- 把備份的數(shù)據(jù)導(dǎo)入到新數(shù)據(jù)庫 mysql ?Cu [UserName] ?Cp[Password] [New_DB_Name] < [DB_Name].sql -- 刪除舊數(shù)據(jù)庫 drop database [DB_Name];
只需要執(zhí)行下面這條命令即可
python rename_database.py old_db_name new_db_name
我們可以使用表重命名的方法,把表重命名到新的數(shù)據(jù)庫之下?;具壿嬋缦拢?/p>
下面使用Python代碼去實現(xiàn),主要代碼(完整代碼見文末):
def rename_db(old_name, new_name):
"""
數(shù)據(jù)庫重命名
:param old_name: 原來的數(shù)據(jù)庫名
:param new_name: 新數(shù)據(jù)庫名
:return: 成功返回True, 失敗返回False
"""
# 獲取所有的表名
sql = """SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=%s"""
conn, cursor = context()
try:
# 創(chuàng)建新數(shù)據(jù)庫名
cursor.execute('create database if not exists {}'.format(new_name))
cursor.execute(sql, (old_name, ))
results = cursor.fetchall()
# 獲取表明,循環(huán)處理放到新的數(shù)據(jù)庫名下
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ù)庫刪掉
cursor.execute('drop database {}'.format(old_name))
except Exception as ex:
conn.rollback()
print("rename_db Exception: {},{}".format(sql, ex))
return False
else:
# 如果沒有發(fā)生異常,則提交事務(wù)
conn.commit()
finally:
conn.close()
return True
1.安裝PyMySQL
pip install PyMySQL
2.修改腳本中關(guān)于數(shù)據(jù)庫賬號配置信息部分
MYSQL_HOST = '127.0.0.1' MYSQL_PORT = 3306 MYSQL_USER = 'ridingroad' MYSQL_PASSWORD = 'xxxxyyyy' MYSQL_DATABASE = 'db_ridingroad'
3.切換到腳本所在目錄,執(zhí)行以下命令即可(數(shù)據(jù)無價,請先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ù)庫連接, 數(shù)據(jù)以字典結(jié)構(gòu)返回
:param is_dict_cursor: 是否返回字典結(jié)構(gòu)的數(shù)據(jù)
:param database: 默認(rèn)連接的數(shù)據(jù)庫
:return: 返回一個連接和一個浮標(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ù)庫重命名
:param old_name: 原來的數(shù)據(jù)庫名
:param new_name: 新數(shù)據(jù)庫名
: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ù)庫名
cursor.execute('create database if not exists {}'.format(new_name))
cursor.execute(sql, (old_name, ))
results = cursor.fetchall()
# 獲取表明,循環(huán)處理放到新的數(shù)據(jù)庫名下
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ù)庫刪掉
cursor.execute('drop database {}'.format(old_name))
except Exception as ex:
conn.rollback()
print("rename_db Exception: {},{}".format(sql, ex))
return False
else:
# 如果沒有發(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)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:[email protected]進(jìn)行舉報,并提供相關(guān)證據(jù),查實之后,將立刻刪除涉嫌侵權(quán)內(nèi)容。
猜你喜歡
今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?”意思是,有若干只雞和兔子關(guān)在同一個籠子里,從上面數(shù)有35個頭,從下面數(shù)有94只腳,問:籠子中有多少只雞?多少只兔子?
這篇文章主要為大家詳細(xì)介紹了如何利用Python語言繪制好看的數(shù)據(jù)動態(tài)圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動手嘗試一下
這篇文章主要介紹了教你使用Python根據(jù)模板批量生成docx文檔,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
這篇文章主要介紹python稀疏矩陣用法,下文有具體的介紹和示例,有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章能有所收獲,接下來小編帶著大家一起了解看看吧。
項目中在前期經(jīng)常要看下數(shù)據(jù)的分布情況,這對于探究數(shù)據(jù)規(guī)律非常有用,概率分布表示樣本數(shù)據(jù)的模樣,使用Python繪制頻率分布直方圖非常簡潔,因為用的頻次非常高,這篇文章主要給大家介紹了關(guān)于Python如何繪制概率分布直方圖的相關(guān)資料,需要的朋友可以參考下
推薦內(nèi)容
成為群英會員,開啟智能安全云計算之旅
立即注冊關(guān)注或聯(lián)系群英網(wǎng)絡(luò)
7x24小時售前:400-678-4567
7x24小時售后:0668-2555666
24小時QQ客服
群英微信公眾號
CNNIC域名投訴舉報處理平臺
服務(wù)電話:010-58813000
服務(wù)郵箱:[email protected]
投訴與建議:0668-2555555
Copyright ? QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版權(quán)所有
增值電信經(jīng)營許可證 : B1.B2-20140078 ICP核準(zhǔn)(ICP備案)粵ICP備09006778號 域名注冊商資質(zhì) 粵 D3.1-20240008