自动化脚本创建mysql数据库_自动化执行数据库脚本
此脚本是用来跑mysql的自动执行的。
脚本功能主要是执行开发各阶段的数据库脚本(存放在svn库中)
执行通过的脚本会copy到下一个测试流程的待执行目录中,并且在原目录进行改名,在下次跑任
此脚本是用来跑mysql的自动执行的。 脚本功能主要是执行开发各阶段的数据库脚本(存放在svn库中) 执行通过的脚本会copy到下一个测试流程的待执行目录中,并且在原目录进行改名,在下次跑任务的时候过滤掉已执行过的脚本。 #!/bin/python import os,shutil import sys import string import time import mysql.connector import io import json SYS = sys.argv[1] DATE = sys.argv[2] ENV = sys.argv[3] TYPE = sys.argv[4] #外部参数传入格式 def add(path): cmd = "svn add %s"%path #参数传入格式%s os.system(cmd) def rm(path): cmd = "svn rm %s"%path os.system(cmd) def commit(): message=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) #获取时间函数和格式 cmd = "svn commit -m "%s""%message #测试时使用 print cmd os.system(cmd) #模拟命令行执行命令 def checkdir(t): if not os.path.exists(t): os.makedirs(t) #新建目录需加上版本控制,否则拷贝过来的文件也无法使用svn add add(t) basedir = os.getcwd() #获取脚本所在路径,我把配置文件和脚本文件放在一起了 svn_dir = "/> project_dir = svn_dir + SYS + "/" #路径合成,需考虑到"/" env_dir = project_dir + DATE + "/" + ENV + "/" sql_dir = env_dir + TYPE + "/" #change to sql directory if not os.path.exists(sql_dir): #判断路径是否存在函数格式 print "No such directory,please check svn repository" sys.exit(1) print sql_dir os.chdir(sql_dir) #切换路径函数 #remove *.done ls = os.listdir(".") #获取路径下所有文件到列表 new_ls = os.listdir(".") new_ls.sort() #列表排序函数 print new_ls for l in ls: if l[-4:] == "done": new_ls.remove(l) #循环remove列表元素时,删除第一个元素后,原列表中元素移位,导致匹配偏差 #check new sql script if len(new_ls): #判断列表长度,如无参数,执行else段代码 for filename in new_ls: #循环读取列表参数 print filename #get db info f = io.open(basedir+"/mysql.json", encoding="utf-8") #解析json文件 p = json.load(f) s = p[SYS][ENV] #抽取所需的数据段到字典s,多层数据格式 with open(filename, "r") as f: #打开sql脚本 data = f.read() print(data) mydb = mysql.connector.connect( host = s["host"], #python字典抽取对应值 user = s["user"], passwd = s["passwd"], database = s["database"] ) mycursor = mydb.cursor() #连接mysql数据库 mycursor.execute(data) #执行sql脚本 #copy dat to uat,copy uat to prod oldfile = sql_dir + "/" + filename print oldfile if string.rfind(sql_dir,"dat"): #判断路径是否包含特定字段 new_env_dir = project_dir + DATE + "/uat/" checkdir(new_env_dir) new_sql_dir = new_env_dir + TYPE + "/" checkdir(new_sql_dir) log = "copy " + filename + " to " + new_sql_dir print log newfile = new_sql_dir + filename shutil.copyfile(oldfile,newfile) add(newfile) elif string.rfind(sql_dir,"uat"): new_env_dir = project_dir + DATE + "/prod/" checkdir(new_env_dir) new_sql_dir = new_env_dir + TYPE + "/" checkdir(new_sql_dir) log = "copy " + filename + " to " + new_sql_dir print log newfile = new_sql_dir + filename shutil.copyfile(oldfile,newfile) #copy的函数和模块mssql 脚本,注意参数格式 add(newfile) else: print "No correct path" sys.exit(1) #rename the script with .done newfilename = filename + ".done" os.rename(filename,newfilename) #重命名方式,需提供源文件和目标文件 rm(filename) add(newfilename) #注意执行完之后svn的提交路径,和代码段对其方式 os.chdir(svn_dir) cmd = "svn update" os.system(cmd) commit() else: print "No new sql script!" sys.exit() mysql.json 格式 { "sysname": { "sit": { "host": "xx.xx.xx.xx", "user": "admin", "passwd": "xxxx, "database": "xxxx" }, "uat": { "host": "xx.xx.xx.xx", "user": "xxxx", "passwd": "xxxx", "database": "xxxx" } } } (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |