清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#!/usr/bin/python
# coding=gbk
import os
import re
import time
import datetime
import operator
import pyodbc
import sys
"""
backup procedure,view,function
"""
def ado_cmd(src, sql):
db = pyodbc.connect(src)
cursor = db.cursor()
cursor.execute(sql)
db.commit()
db.close()
def ado_sel(src, sql):
db = pyodbc.connect(src)
cursor = db.cursor()
cursor.execute(sql)
ds = cursor.fetchall()
db.close()
return ds
def getprocedure(src, pname):
sql = "EXEC Sp_HelpText '" + pname + "';"
ds = ado_sel(src, sql)
text = ''
index = 0
try:
for dr in ds:
#print(str(dr[0]))
text = text + str(dr[0])
text = text.replace("\r\n", "") + "\n"
index = index + 1
except Exception as e:
print("查询存储过程出错:" + pname + " [line:"+str(index)+"] ")
print(e)
return text
if __name__ == '__main__':
src = 'DRIVER={SQL Server};SERVER=服务器;DATABASE=数据库;UID=用户名;PWD=密码'
# p procedure; v view; fn function
sql = "SELECT [name],[type] FROM sysobjects WHERE type IN('p','v','fn') order by name"
#src = 'DSN=sampledb;UID=dba;pwd=sql'
now = datetime.datetime.now()
path = now.strftime('%Y-%m-%d')
if os.path.exists(path):
for i in range(98,122):
new_path = path + "_" + chr(i)
if not os.path.exists(new_path):
path = new_path
break
else:
print(new_path + '已存在')
os.makedirs(path) #创建新文件夹
sv = "View"
sp = "Prodecure"
sfn = "Function"
os.makedirs(path + '/' + sv)
os.makedirs(path + '/' + sp)
os.makedirs(path + '/' + sfn)
ds = ado_sel(src, sql)
i_count = len(ds)
print("count=" + str(i_count))
for dr in ds:
p2 = ""
pname = str(dr[0])
typ = str(dr[1])
typ = typ.strip()
if typ == "V" : p2 = sv
elif typ == "P" : p2 = sp
elif typ == "FN" : p2 = sfn
print(typ + ", " + p2 + ", " + pname)
text = getprocedure(src, pname)
filename = pname + ".sql"
file1 = open(path + "/" + p2 + "/" + filename, "w")
file1.write(text + "\n")
file1.close