利用Python如何批量修改數(shù)據(jù)庫執(zhí)行Sql文件
前言
由于上篇文章中批量修改了文件,有的時(shí)候數(shù)據(jù)庫也需要批量修改一下,之前的做法是使用寶塔的phpMyAdmin導(dǎo)出一個(gè)已經(jīng)修改好了的sql文件,然后依次去其他數(shù)據(jù)庫里導(dǎo)入,效率不說極低,也算低了,且都是些重復(fù)性的勞動(dòng),所以打算用Python來批量執(zhí)行sql
環(huán)境
- 版本:Python3.6
- 系統(tǒng):MacOS
- IDE:PyCharm
- 第三方庫:pymysql
Show Code
import pymysql
host = 'xxx.65.9.191'
username = 'root'
password = 'root'
def connectMySQL():
print('開始連接數(shù)據(jù)庫')
# 打開數(shù)據(jù)庫連接
db = pymysql.connect(host,username,password,charset='utf8')
# 使用 cursor() 方法創(chuàng)建一個(gè)游標(biāo)對(duì)象 cursor
cursor = db.cursor()
# 使用 execute() 顯示所有數(shù)據(jù)庫
cursor.execute("SHOW DATABASES")
print('開始查詢所有數(shù)據(jù)庫')
# 獲取所有數(shù)據(jù)庫名稱
data = cursor.fetchall()
# 開始操作
for dbb in data:
dbname = dbb[0]
print('選中' + dbname + '數(shù)據(jù)庫')
# 選擇數(shù)據(jù)庫
cursor.execute("use " + dbname)
# 查看有哪些表
cursor.execute("show tables")
table = cursor.fetchall()
# 如果不是3個(gè)表的就不管
if len(table) != 3:
continue
for tb in table:
tbname = tb[0]
print('開始刪除'+tbname+'表')
# 刪除所有的表
cursor.execute("DROP TABLE " + tbname)
executeScriptsFromFile('1.sql', cursor)
db.close()
def executeScriptsFromFile(filename,cursor):
fd = open(filename, 'r',encoding='utf-8')
sqlFile = fd.read()
fd.close()
sqlCommands = sqlFile.split(';')
for command in sqlCommands:
try:
cursor.execute(command)
except Exception as msg:
print(msg)
print('sql執(zhí)行完成')
if __name__ == "__main__":
connectMySQL()
解釋代碼
這是用于執(zhí)行sql文件,這里第一句就有個(gè)坑,最好設(shè)置encoding='utf-8'否則可能會(huì)報(bào)錯(cuò)UnicodeEncodeError: 'latin-1' codec can't encode characters in position 41-44: ordinal not in range(256),當(dāng)讀取了sql文件后用;分割語句然后用for循環(huán)依次執(zhí)行sql語句
def executeScriptsFromFile(filename,cursor):
fd = open(filename, 'r',encoding='utf-8')
sqlFile = fd.read()
fd.close()
sqlCommands = sqlFile.split(';')
for command in sqlCommands:
try:
cursor.execute(command)
except Exception as msg:
print(msg)
print('sql執(zhí)行完成')
這一段比較容易理解了,首先是連接數(shù)據(jù)庫,注意還是最好設(shè)置一下charset='utf8' ,因?yàn)槲乙僮鞫鄠€(gè)數(shù)據(jù)庫執(zhí)行sql文件,所以先把數(shù)據(jù)庫名稱全部獲取出來,這里獲取出來的結(jié)果是元組類型,即使for循環(huán)后出來的也是一個(gè)元組,所以用[0]取出元組中的值,然后選中數(shù)據(jù)庫執(zhí)行刪表操作(當(dāng)然不是每個(gè)人都要按我這些操作哈,需要執(zhí)行啥操作就自己改SQL語句),表刪完了,然后開始執(zhí)行1.sql文件,執(zhí)行完成后關(guān)閉數(shù)據(jù)庫
def connectMySQL():
print('開始連接數(shù)據(jù)庫')
# 打開數(shù)據(jù)庫連接
db = pymysql.connect(host,username,password,charset='utf8')
# 使用 cursor() 方法創(chuàng)建一個(gè)游標(biāo)對(duì)象 cursor
cursor = db.cursor()
# 使用 execute() 顯示所有數(shù)據(jù)庫
cursor.execute("SHOW DATABASES")
print('開始查詢所有數(shù)據(jù)庫')
# 獲取所有數(shù)據(jù)庫名稱
data = cursor.fetchall()
# 開始操作
for dbb in data:
dbname = dbb[0]
print('選中' + dbname + '數(shù)據(jù)庫')
# 選擇數(shù)據(jù)庫
cursor.execute("use " + dbname)
# 查看有哪些表
cursor.execute("show tables")
table = cursor.fetchall()
# 如果不是3個(gè)表的就不管
if len(table) != 3:
continue
for tb in table:
tbname = tb[0]
print('開始刪除'+tbname+'表')
# 刪除所有的表
cursor.execute("DROP TABLE " + tbname)
executeScriptsFromFile('1.sql', cursor)
db.close()
這2篇文章的代碼從思路、編寫、到測試,用了一下午吧!我對(duì)Python也不是很熟悉,所以中間也踩了些坑,但確實(shí)能看出來,Python作為膠水語言拿來做這些小工具真的舒服!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
matplotlib 使用 plt.savefig() 輸出圖片去除旁邊的空白區(qū)域
這篇文章主要介紹了matplotlib 使用 plt.savefig() 輸出圖片去除旁邊的空白區(qū)域,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
利用Python實(shí)現(xiàn)微信找房機(jī)器人實(shí)例教程
這篇文章主要給大家介紹了關(guān)于如何利用Python實(shí)現(xiàn)微信找房機(jī)器人的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
Jupyter notebook在mac:linux上的配置和遠(yuǎn)程訪問的方法
今天小編就為大家分享一篇關(guān)于Jupyter notebook在mac:linux上的配置和遠(yuǎn)程訪問的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
Python之Numpy的超實(shí)用基礎(chǔ)詳細(xì)教程
這篇文章主要介紹了Python之Numpy的超實(shí)用基礎(chǔ)詳細(xì)教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
python 用opencv實(shí)現(xiàn)霍夫線變換
這篇文章主要介紹了python 如何用opencv實(shí)現(xiàn)霍夫線變換,幫助大家更好的理解和使用python處理圖片,感興趣的朋友可以了解下2020-11-11
Python實(shí)現(xiàn)的生產(chǎn)者、消費(fèi)者問題完整實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)的生產(chǎn)者、消費(fèi)者問題,簡單描述了生產(chǎn)者、消費(fèi)者問題的概念、原理,并結(jié)合完整實(shí)例形式分析了Python實(shí)現(xiàn)生產(chǎn)者、消費(fèi)者問題的相關(guān)操作技巧,需要的朋友可以參考下2018-05-05

