这个脚本主要是遍历执行文件夹下的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)
写了小半天,踩了很多坑才写出来的,与大家分享希望能帮到大家,如果有个赞鼓励一下就更棒了,