python3執行.sql檔案

肖昌銘發表於2021-07-25

這個指令碼主要是遍歷執行資料夾下的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)

寫了小半天,踩了很多坑才寫出來的,與大家分享希望能幫到大家,如果有個贊鼓勵一下就更棒了,

相關文章