加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

自动化脚本创建mysql数据库_自动化执行数据库脚本

发布时间:2023-01-05 06:01:18 所属栏目:MsSql教程 来源:未知
导读:
此脚本是用来跑mysql的自动执行的。
脚本功能主要是执行开发各阶段的数据库脚本(存放在svn库中)
执行通过的脚本会copy到下一个测试流程的待执行目录中,并且在原目录进行改名,在下次跑任

365b98f9331dafccc49d38005bbafd9d.png

此脚本是用来跑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

mssql 脚本_alter table 修改 默认值 mssql_mssql update语法

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"

}

}

}

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!