这个脚本主要是遍历执行文件夹下的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)

写了小半天,踩了很多坑才写出来的,与大家分享希望能帮到大家,如果有个赞鼓励一下就更棒了,

版权声明:本文为mokerbarry原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mokerbarry/p/15059352.html