這個指令碼主要是遍歷執行資料夾下的sql檔案,但是沒有辨別檔案的格式,所以資料夾下只能夠放.sql檔案,否則會報錯哈。
我的sql資料夾與執行的檔案平級,所以dir_path就是sql,大家依照自己的路徑為準。
import pymysql
import datetime
import config as conf
import os
# 用於從某個資料夾中遍歷執行.sql的檔案
def sqldir_to_mysql(dir):
db = pymysql.connect(host=conf.config.get('mysql', 'host'), user=conf.config.get(
'mysql', 'user'), passwd=conf.config.get('mysql', 'password'), db=conf.config.get('mysql', 'db_name'), charset='utf8')
dblj = db.cursor()
count = 0
ycts = 0
cgts = 0
str1 = ''
start = datetime.datetime.now().strftime('%Y_%m_%d_%H:%M:%S.%f')
for home, dirs, files in os.walk(dir):
for filename in files:
dirname = os.path.dirname(os.path.abspath(__file__))
fullname = os.path.join(dirname, dir, filename)
fileObject = open(fullname);
for line in fileObject:
if not line.startswith("--") and not line.startswith('/*'): #處理註釋
str1 = str1+line.strip() #pymysql一次只能執行一條sql語句
fileObject.close() #迴圈讀取檔案時關閉檔案很重要,否則會引起bug
for command in str1.split(';'):
if command:
try:
dblj.execute(command+';')
count = count + 1
cgts = cgts + 1
except db.DatabaseError as e:
print(e)
ycts = ycts + 1
pass
end = datetime.datetime.now().strftime('%Y_%m_%d_%H:%M:%S.%f')
print("成功"+str(cgts)+"條", "失敗"+str(ycts)+"條")
print('start: %s'%start)
print('end: %s'%end)
dblj.close()
if __name__ == '__main__':
dir_path = 'sql'
sqldir_to_mysql(dir_path)
寫了小半天,踩了很多坑才寫出來的,與大家分享希望能幫到大家,如果有個贊鼓勵一下就更棒了,