思路:
循環指定目錄中的每個.sql文件,讀取每行內容,拼接到列表中,按每次1000行執行。
備註:
pymysql在8.0版本以前(不包含8.0)默認可以同時執行多條sql語句的,例如“insert into tb(1);insert into tb(2);”
但是在8.0之後不再爲默認,需要手動配置pymysql.connect的參數client_flag=CLIENT.MULTI_STATEMENTS,否則會報錯。
import os import pymysql from pymysql.constants import CLIENT # pymysql在8.0版本之後需要手動配置,以支持同時執行多條sql語句 conn = pymysql.connect(host='192.168.1.17', user='root', passwd="password", db='db1', client_flag=CLIENT.MULTI_STATEMENTS) cur = conn.cursor() path = r'D:\Projects\sql' for filename in os.listdir(path): if filename.endswith(".sql") == False: continue count = 0 time = 0 sql = [] filepath = os.path.join(path,filename) with open(filepath, "r", encoding="utf-8") as f: for each_line in f.readlines(): if not each_line or each_line == "\n": continue if count < 1000: sql.append(each_line.strip()) count += 1 else: #達到1000行時執行 time += 1 print('{}第{}次開始執行sql語句,記錄數:{}'.format(filename, time, count)) cur.execute("".join(sql)) conn.commit() sql = [each_line.strip()] count = 1 #讀取完文件,不到1000行 if sql: time += 1 print('{}第{}次開始執行sql語句,記錄數:{}'.format(filename, time, count)) cur.execute("".join(sql)) conn.commit()