# -*- coding:utf-8 -*- import pymssql import time import datetime import os from SentEmail import SentMail # 使用pyinstaller打包的时候,非要导入下面两个,不知道为什么 import _mssql import decimal def getModifiedProduce(): # lastDate记录了上个备份的日期,以此来区分哪些被修改过的存储过程需要备份 # charset='utf8'不能省,不指定字符集有时候会报错 with open(r'C:\Users\xxx\backupDate.txt', 'r') as f: lastDate = f.read() #对多个数据库备份存储过程 dbInfo = [('192.168.1.31:15323', 'user1', 'password1', 'dbName1'), ('192.168.1.31:15323', 'user2', 'password2', 'dbName2')] for info in dbInfo: print(info) host, user, password, database = info conn = pymssql.connect(host=host, user=user, password=password, database=database, charset='utf8') # print(host, user, password, database) cur = conn.cursor() # 备份当天被修改的存储过程只能等第二天备份,所以这里要加=号 cur.execute( 'select name,convert(varchar(30),modify_date,112) ' 'from sys.procedures WHERE CONVERT(VARCHAR(30),modify_date,23)>=CONVERT(VARCHAR(30),\'' + lastDate + '\',23)') pName = cur.fetchall() print(pName) # 邮件正文 msg = '存储过程修改记录如下:\n' # 获取昨天的日期 # date = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y%m%d") for name in pName: cur.execute('sp_helptext ' + name[0]) pCotent = cur.fetchall() dir = r'\\tsclient' + r'\D\SVN_NEW\OnlineSqlBackup\\' + database + r'\\' + name[0] + r'.sql\\' + name[ 0] + r'.sql_' + name[1] msg = msg + name[0] + '\n' if not os.path.exists(dir): print(dir) for i in pCotent: with open(dir, 'a') as f: f.write(i[0].replace('\r', '')) if pName: to_list = ['mailName1', 'mailName2'] sentMail = SentMail('sender', to_list, 'password') sentMail.sent('smtpServerName', msg) date = time.strftime("%Y%m%d") with open(r'C:\Users\xxx\backupDate.txt', 'w') as f: f.write(date) conn.close() getModifiedProduce()
python3备份SqlServer存储过程代码,并保存到本地,并发送邮件告知修改记录
最新推荐文章于 2023-11-29 21:47:57 发布